Javascript - 从对象数组中获取数据

标签 javascript ecmascript-6

我得到了这个样本数据。

"array" : [
    {"Id" : "1", "preferred" : false}, 
    {"Id" : "1", "preferred" : true }, 
    {"Id" : "2", "preferred" : false}, 
    {"Id" : "2", "preferred" : false},]

我想摆脱这样的事情。

"array2":[{"Id": 1, numOfTrue: 1, numOfFalse: 1},{"Id": 2, numOfTrue: 0, numOfFalse: 2}]

到目前为止我得到的是一种如何从初始数组中获取唯一ID的方法。

const unique = [...new Set(array.map(item => Id))];

下一步将是对数组进行一些 forEach 并比较 Id 值并为该 bool 值设置一些计数器。因此,在深入研究 forEach 解决方案之前,我想问一下是否还有其他方法可以使用 .filter().reduce() 方法。

最佳答案

您可以使用reduce() 构建一个以Id 为键的分组对象。每次您看到 Id 时,都会再次增加相应键处的值。最后你的数组将是对象的Object.values():

let array = [
    {"Id" : "1", "preferred" : false}, 
    {"Id" : "1", "preferred" : true }, 
    {"Id" : "2", "preferred" : false}, 
    {"Id" : "2", "preferred" : false}
]

let counts = array.reduce((counts, {Id, preferred}) => {
    // If you haven't seen this Id yet, make a new entry
    if (!counts[Id]) counts[Id] = {Id, numOfTrue: 0, numOfFalse: 0}

    // increment the appropriate value:
    if (preferred) counts[Id].numOfTrue++
    else counts[Id].numOfFalse++
    return counts
}, {})

// get the values array of the object:
console.log(Object.values(counts))

关于Javascript - 从对象数组中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694969/

相关文章:

javascript - 无法从命名空间的 javascript 函数在 Chrome 控制台中获取返回值

javascript - 如何使用带有 HTML 的 JavaScript 根据颜色 &lt;input&gt; 更改特定 <div> 的背景?

javascript - 使用 D3 Scales 将颜色转换为数字

javascript - 在 javascript ES06 中创建通用类和函数

javascript - 为什么 Babel 使用 `arguments` 对象作为可选参数?

javascript - 这个 JS 函数参数语法(具有属性默认值的对象初始化器,类似于 rest/spread 参数)是否有名称和效果?

Javascript 比另一个属性上的 XSLT generate-id() 更好地识别回调节点

javascript - 矩形笔划上的单击事件

javascript - JS中搜索并返回一个json对象

javascript - 获取ES6类实例的类名