我有對象數組中,具有這樣的結構:當我有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