在Array的特定索引上插入对象数据时遇到一个小问题。
这是我的JSON
let arr = [
{"days":3, "count" : 10 },
{"days":4, "count" : 12 },
{"days":7, "count" : 14 },
{"days":9, "count" : 20 }
]
输出,我想拥有。
updatedArr = [
{"days":0, "count" : 0 },
{"days":0, "count" : 0 },
{"days":3, "count" : 10 },
{"days":4, "count" : 12 },
{"days":0, "count" : 0 },
{"days":6, "count" : 34 },
]
因此,基本上我希望基于称为 days 的键将对象数据推入特定的索引。
如果 days 的值大于5,则它将是所有 days 值的总和,然后将其推到最后一个索引,例如第五索引。
这是我尝试过的代码。
let arr = [{
"days": 3,
"count": 10
},
{
"days": 4,
"count": 12
},
{
"days": 7,
"count": 14
},
{
"days": 9,
"count": 20
}
]
for (let index = 0; index < 6; index++) {
const element = arr[index];
let eachObject = {}
eachObject.count = 0
if (element && element !== undefined && element.days && element.days <= 5) {
eachObject.days = element.days
eachObject.count = element.count
arr.splice((element.days - 1), 0, eachObject)
} else if (element && element !== undefined && element.days > 5) {
eachObject.days = element.days
eachObject.count += Number.parseInt(element.count)
arr.splice(4, 0, eachObject)
} else {
eachObject.days = 0
eachObject.count = 0
arr.push(eachObject)
}
}
任何帮助都会很棒。
谢谢。
答案 0 :(得分:1)
您可以建立一个具有空计数的新数据集,并使用数组中的实际值更新它们。
让我们从累加器开始。
这是一个新数组,它使用Array.from
个项,该项的长度为6
,并且对象的映射具有days
和count
属性。
Array#reduce
接受一个数组和一个 startValue ,并为每个元素返回更改后的累加器。
在回调内部,对days
属性进行了调整,以获取更大的价值。
该元素的某些属性发生了更新。最后,返回累加器r
。
let array = [{ days: 3, count: 10 }, { days: 4, count: 12 }, { days: 7, count: 14 }, { days: 9, count: 20 }],
maxDays = 6,
result = array.reduce(
(r, { days, count }) => {
days = Math.min(days, maxDays);
r[days - 1].days = days;
r[days - 1].count += count;
return r;
},
Array.from({ length: maxDays }, () => ({ days: 0, count: 0 }))
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }