JAVASCRIPT - 从对象的父数组获取值,在数组展平后在子对象内
JAVASCRIPT - Get Value from Parent Array of Objects, inside the Child Object after Array Flattening
我有一个对象数组,它有一些值。示例:
bigArray: [
{
greatName: 'Name String - #1',
array: [{
id: 1,
name: 'string name - #1'
}]
},
{
greatName: 'Name String - #2',
array: [{
id: 2,
name: 'string name - #2'
}]
},
{
greatName: 'Name String - #3',
array: [{
id: 3,
name: 'string name - #3'
}]
}
]
我使用了 ramda 中的以下组合函数,以获取所有数组 array
属性值并将它们展平为单个数组:
const extractRB = compose(
flatten,
map(props(['array']))
);
这给了我以下数组:
// Flatten Array:
flatten: [
{
id: 1,
name: 'string name - #1'
},
{
id: 2,
name: 'string name - #2'
},
{
id: 3,
name: 'string name - #3'
}
]
现在,这是我的功能的要求。 问题是我还需要每个对象内的 greatName
、属性 值,以便通过它们进行映射。但是我找不到一种方法来实际获取对象内部的正确值..
我要实现的是这个对象数组。 Keep in mind that I can have dozens of Objects in Big Array, and hundrends of Objects inside each child array
:
// Flatten Array:
flatten: [
{
id: 1,
name: 'string name - #1'
greatName: 'Name String - #1',
},
{
id: 2,
name: 'string name - #2',
greatName: 'Name String - #2',
},
{
id: 3,
name: 'string name - #3',
greatName: 'Name String - #3',
}
]
我这样做了,它从展平数组展开原始对象并向其添加 greatName
属性,但如何计算每个对象的正确值。对象和数组之间没有共同的值作为条件:
flatten.map(flatObj => {...flatObj, greatName: bigArray.map(// what operation can I do here, to get the correct value for each object inside the `bigArray` )});
我尝试了很多条件操作,但它们总是return false。 Mayne 有一种方法可以用每个 array
的长度来做到这一点,但不确定如何去做。
不胜感激..!!谢谢!!
var bigArray= [
{
greatName: 'Name String - #1',
array: [{
id: 1,
name: 'string name - #1'
}]
},
{
greatName: 'Name String - #2',
array: [{
id: 2,
name: 'string name - #2'
}]
},
{
greatName: 'Name String - #3',
array: [{
id: 3,
name: 'string name - #3'
}]
}
]
console.log(bigArray.flatMap(({greatName, array}) => array.flatMap(x => ({greatName, ...x}))))
如果array
属性总是只有1个元素,那么你可以写得更短:
bigArray.map(({greatName, array}) => ({greatName, ...array[0]}))
你能试试这个吗,也许这会解决你的问题:
bigArray.forEach((item)=>{
item.array.greatName = item.greatName;
delete item.greatName;
})
只需控制台 bigArray,不要使用它,只需尝试上面的方法
const extractRB = compose(
flatten,
map(props(['array']))
);
我有一个对象数组,它有一些值。示例:
bigArray: [
{
greatName: 'Name String - #1',
array: [{
id: 1,
name: 'string name - #1'
}]
},
{
greatName: 'Name String - #2',
array: [{
id: 2,
name: 'string name - #2'
}]
},
{
greatName: 'Name String - #3',
array: [{
id: 3,
name: 'string name - #3'
}]
}
]
我使用了 ramda 中的以下组合函数,以获取所有数组 array
属性值并将它们展平为单个数组:
const extractRB = compose(
flatten,
map(props(['array']))
);
这给了我以下数组:
// Flatten Array:
flatten: [
{
id: 1,
name: 'string name - #1'
},
{
id: 2,
name: 'string name - #2'
},
{
id: 3,
name: 'string name - #3'
}
]
现在,这是我的功能的要求。 问题是我还需要每个对象内的 greatName
、属性 值,以便通过它们进行映射。但是我找不到一种方法来实际获取对象内部的正确值..
我要实现的是这个对象数组。 Keep in mind that I can have dozens of Objects in Big Array, and hundrends of Objects inside each child array
:
// Flatten Array:
flatten: [
{
id: 1,
name: 'string name - #1'
greatName: 'Name String - #1',
},
{
id: 2,
name: 'string name - #2',
greatName: 'Name String - #2',
},
{
id: 3,
name: 'string name - #3',
greatName: 'Name String - #3',
}
]
我这样做了,它从展平数组展开原始对象并向其添加 greatName
属性,但如何计算每个对象的正确值。对象和数组之间没有共同的值作为条件:
flatten.map(flatObj => {...flatObj, greatName: bigArray.map(// what operation can I do here, to get the correct value for each object inside the `bigArray` )});
我尝试了很多条件操作,但它们总是return false。 Mayne 有一种方法可以用每个 array
的长度来做到这一点,但不确定如何去做。
不胜感激..!!谢谢!!
var bigArray= [
{
greatName: 'Name String - #1',
array: [{
id: 1,
name: 'string name - #1'
}]
},
{
greatName: 'Name String - #2',
array: [{
id: 2,
name: 'string name - #2'
}]
},
{
greatName: 'Name String - #3',
array: [{
id: 3,
name: 'string name - #3'
}]
}
]
console.log(bigArray.flatMap(({greatName, array}) => array.flatMap(x => ({greatName, ...x}))))
如果array
属性总是只有1个元素,那么你可以写得更短:
bigArray.map(({greatName, array}) => ({greatName, ...array[0]}))
你能试试这个吗,也许这会解决你的问题:
bigArray.forEach((item)=>{
item.array.greatName = item.greatName;
delete item.greatName;
})
只需控制台 bigArray,不要使用它,只需尝试上面的方法
const extractRB = compose(
flatten,
map(props(['array']))
);