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

标签 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);

提前致谢!

最佳答案

按正确的顺序创建所需 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/

相关文章:

java - 使用 Scanner/Parser/Lexer 进行脚本整理

javascript - 尽管未使用自动播放标签,但HTML音频会在页面加载时播放

javascript - 如何实现存储库以整洁架构?

javascript - 使用 Object.assign 或类似的扩展数组而不是覆盖数组的模式

java Hangman - 计算正确的用户猜测

Android:Json获取内部对象

java - 错误的值/数字存储为文本 - Apache POI

python - 制定了动态规划算法的递归后,我们如何填写表格?

c# - 为什么 dynamic 不假设它可以支持此操作?

c - 将整数解释为指向动态字符串的指针,从指向指针的指针指向的动态 block