我有对象列表,
我想将值
id
与下一个值进行比较,如果小于前一个值,则分配名为IDS
的新键并将值设置为"1"
,为什么是(1),因为它从数组中的第一个对象开始。
如果下一个值大于前一个值,则情况相同。
这是我可以解释的。 对于第 (4, 5) 和 (2 ,3) 部分,我发现很难解释这部分。
提前谢谢您。
let lists = [
{ price:10, id:1},
{ price:11, id:2},
{ price:12, id:3},
{ price:13, id:4},
{ price:14, id:5},
{ price:12, id:4},//this part
{ price:12, id:5},//this part
{ price:11, id:4},
{ price:10, id:3},
{ price:9, id:2},
{ price:12, id:3},//this part
{ price:12, id:2},//this part
]
结果:
let lists = [
{ price:10, id:1, IDS:1 },
{ price:11, id:2, IDS:1 },
{ price:12, id:3, IDS:1 },
{ price:13, id:4, IDS:1 },
{ price:14, id:5, IDS:1 },
{ price:12, id:4, IDS:2 },
{ price:12, id:5, IDS:2 },
{ price:11, id:4, IDS:3 },
{ price:10, id:3, IDS:3 },
{ price:9, id:2, IDS:3 },
{ price:12, id:3, IDS:4 },
{ price:12, id:2, IDS:4 },
]
您可以使用对象来增加组值和最大值,以防止组值较小。
const
group = (group, max) => (o, i, a) => {
max = group[o.id] = Math.max((group[o.id] || 0) + 1, max);
return { ...o, IDS: group[o.id] };
},
lists = [{ price: 10, id: 1 }, { price: 11, id: 2 }, { price: 12, id: 3 }, { price: 13, id: 4 }, { price: 14, id: 5 }, { price: 12, id: 4 }, { price: 12, id: 5 }, { price: 11, id: 4 }, { price: 10, id: 3 }, { price: 9, id: 2 }, { price: 12, id: 3 }, { price: 12, id: 2 }],
result = lists.map(group({}, 0));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }