(javascript对象),如果大于前一个值,则将相同的值设置为下一个值,反之亦然

问题描述 投票:0回答:1

我有对象列表,

我想将值

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 },
]
javascript arrays object
1个回答
0
投票

您可以使用对象来增加组值和最大值,以防止组值较小。

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; }

© www.soinside.com 2019 - 2024. All rights reserved.