我有对象数组中,具有这样的结构:当我有2(或甚至更多)具有相同days
值对象发生合并数组的元素,如果至少2具有相同的属性值
days : string // "mo","tu","we"..
time : string // "9am - 3pm"
有些时候。在这种情况下,我需要合并这个项目(改变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。
你确定你想吗?如果你加入这样的时代,似乎这些时间适用于同一个对象的所有日子,这是不正确的。 – trincot
@trincot,为什么?我得到一种格式的回复 - 分组日期和时间(所有对象都有这个时间)......但是如果某些商店在某些日子有休息时间,那么我在那一天得到2倍的“时间”:如果在星期一商店从早上9点到下午2点工作,然后休息,然后再从下午4点到晚上9点工作 - 响应将返回2个对象'[{days:“mo”,time:“9am - 2pm”},{days: “mo”,时间:“4pm - 9pm”}]'。所以我认为我正确地思考,不是吗? – demo
在这个例子中,它是可以的,但是如果你在第一个对象的'days'属性中提到了多个天,并且将它与单日第二个对象结合:'[{days:“mo,tu”,time:“9am - 2pm“},{days:”mo“,time:”4pm - 9pm“}]',你会怎么做?这个结果会令周二下午感到困惑:'[{days:“mo,tu”,time:“9am - 2pm,4pm - 9pm”}] – trincot