gpt4 book ai didi

javascript - 如果至少 2 个具有相同的属性值,则合并数组元素

转载 作者:行者123 更新时间:2023-11-29 10:07:38 25 4
gpt4 key购买 nike

我有对象数组,具有这种结构:

days : string // "mo","tu","we"..
time : string // "9am - 3pm"

有时,当我有 2 个(或更多)具有相同 days 值的对象时,会发生这种情况。在这种情况下,我需要合并这些项目(更改 time 值,加入来自这个“相同”项目的值)

var array = [{
days: "mo,tu,we,th",
time: "9am - 3pm"
}, {
days: "mo,tu,we,th",
time: "5pm - 9pm"
}, {
days: "sa,su",
time: "9am - 2pm"
}];

var newArr = [];
for (var i = 0; i < array.length; i++) {
var currItem = array[i];

var mergedArray = [];
array.forEach(function(el) {
if (currItem.days == el.days) {
mergedArray.push(el.time);
}
});
var mergedTime = mergedArray.join(', ');
currItem.time = mergedTime;
if (newArr.filter(function(item) {
return item.days == currItem.days;
}).length < 1) {
newArr.push(currItem);
}
}

console.log(newArr);

这是我看到的如何合并我的数组项,但我不喜欢它,因为里面有很多循环。有更优雅的解决方案吗?也许使用 lodash。

最佳答案

您可以使用 _.uniqWith 获得预期的结果并对对象引用进行一些篡改。

如果不想修改原数组,可以传一个_ .cloneDeep数组的 _.uniqWith功能。

var arr = [{
days: "mo,tu,we,th",
time: "9am - 3pm"
}, {
days: "mo,tu,we,th",
time: "5pm - 9pm"
}, {
days: "sa,su",
time: "9am - 2pm"
}];

console.log(_.uniqWith(arr, function(a, b) {
if (a.days === b.days) {
b.time += ', ' + a.time;
return true;
}
}));
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>

关于javascript - 如果至少 2 个具有相同的属性值,则合并数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40330074/

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