gpt4 book ai didi

javascript - lodash:组合对象数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:05:19 24 4
gpt4 key购买 nike

在 lodash 中,我想将对象数组转换为包含每个属性数组的单个对象。

我有一个对象数组:

var students = [{
name: 'A',
idNo: 1,
marks: {
math: 98,
sci: 97,
eng: 89
}
}, {
name: 'B',
idNo: 2,
marks: {
math: 88,
sci: 87,
eng: 79
}
}, {
name: 'C',
idNo: 3,
marks: {
math: 87,
sci: 98,
eng: 91
}
}]

我想像这样组合/ reshape 它们:

{
name: [A, B, C],
idNo: [1, 2, 3],
marks: [{
math: 98,
sci: 97,
eng: 89
}, {

math: 88,
sci: 87,
eng: 79
}, {
math: 87,
sci: 98,
eng: 91
}
}]
}

我希望这完全是用 lodash 或 js 内置函数完成的,没有任何循环。

编辑:我已经实现了 Nenad 建议的解决方案。我想要 lodash 中的效用函数。

最佳答案

您可以使用 lodash 的 mapValues功能:

var result = _.mapValues(students[0], (value, key) => _.map(students, key));

mapValues 创建一个对象,该对象具有与作为第一个参数传递给它的对象相同的键。这里我们传递了学生数组 students[0] 中的第一个对象,所以 mapValues 返回的对象看起来像这样:

{
name: ....,
idNo: ....,
marks: ....
}

每个键的值由作为第二个参数传递给 mapValues 的函数确定。 mapValues 将为每个键调用此函数并传递值和键。我们对值不感兴趣,但键用于为该键提取 student 数组中的所有值(通过将键作为第二个参数调用 map)。

var students = [{
name: 'A',
idNo: 1,
marks: {
math: 98,
sci: 97,
eng: 89
}
}, {
name: 'B',
idNo: 2,
marks: {
math: 88,
sci: 87,
eng: 79
}
}, {
name: 'C',
idNo: 3,
marks: {
math: 87,
sci: 98,
eng: 91
}
}]


var result = _.mapValues(students[0], (value, key) => _.map(students, key));

document.getElementById('result').textContent = JSON.stringify(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

<p>
<pre id="result"></pre>
</p>

关于javascript - lodash:组合对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com