我想根据相似对象数组中的键动态创建对象值数组

时间:2019-02-10 20:53:49

标签: javascript arrays dynamic javascript-objects

这是我的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);

谢谢!

1 个答案:

答案 0 :(得分:1)

以正确的顺序创建所需道具的数组。使用嵌套的Array.map()调用来创建矩阵。您可以使用Set来使值区分。

system