这是我的 JavaScript 对象数组:
inventoryArray = [
{name: 'pizza', category: 'food', unique: 'no', amount: 12}
{name: 'bow', category: 'weapon', unique: 'no', amount: 1}
{name: 'pizza', category: 'food', unique: 'yes', amount: 1}
]
它们都具有相同的键,但大多数具有不同的值。
我想根据键动态创建一个值数组,如下所示:
values = [
['pizza', 'bow', 'pizza'] // name
['food', 'weapon', 'food'] // category
['no', 'no', 'yes'] //unique
[12, 1, 1] // amount
// TODO only add distinct values:
// i.e. first array would be ['pizza', 'bow']
]
我最接近的是:
const keys = [];
const values = [];
for(let i = 0; i < inventoryArray.length; i++){
keys[i] = Object.keys(inventoryArray[i]);
}
for(let i = 0; i < keys[0].length; i++) {
const value = [];
for(let j = 0; j < inventoryArray.length; j++) {
value[j] = inventoryArray[j][keys[j][i]];
}
values[i] = value;
}
是的,我知道这很丑。
第二个 for 循环中的 keys[0]
并不是真正动态的。对吗?
我对 JavaScript 还很陌生,我尝试使用数组的 map 方法,但无法让它动态地创建它们。就一一来说:
const names = inventoryArray.map(a => a.name);
提前致谢!
最佳答案
按正确的顺序创建所需 Prop 的数组。使用嵌套Array.map()
调用创建矩阵。您可以使用 Set ,使值(value)观不同。
const inventoryArray = [{"name":"pizza","category":"food","unique":"no","amount":12},{"name":"bow","category":"weapon","unique":"no","amount":1},{"name":"pizza","category":"food","unique":"yes","amount":1}]
const props = ['name', 'category', 'unique', 'amount']
const result = props.map(p =>
[...new Set(inventoryArray.map(o => o[p]))]
)
console.log(result)
关于javascript - 我想根据相似对象数组中的键动态创建对象值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54620970/