带携带功能的可变阵列?

Eri*_*ics 4 javascript arrays

我有一个对象数组,我想用一个依赖于序列的新值来更新。

所以这:

[
  { "init": 3, "data": "..." },
  { "init": 3, "data": "..." },
  { "init": 3, "data": "..." },
  { "init": 5, "data": "..." },
  { "init": 6, "data": "..." },
  { "init": 6, "data": "..." },
  { "init": 7, "data": "..." },
  { "init": 8, "data": "..." }
  }
]
Run Code Online (Sandbox Code Playgroud)

..变成这样:

[
  { "init": 3, "group": "odd",  "data": "..." },
  { "init": 3, "group": "odd",  "data": "..." },
  { "init": 3, "group": "odd",  "data": "..." },
  { "init": 5, "group": "even", "data": "..." },
  { "init": 6, "group": "odd",  "data": "..." },
  { "init": 6, "group": "odd",  "data": "..." },
  { "init": 6, "group": "odd",  "data": "..." },
  { "init": 7, "group": "even", "data": "..." },
  { "init": 8, "group": "odd",  "data": "..." }
  }
]
Run Code Online (Sandbox Code Playgroud)

也就是说,在每个项目中插入一个“ group”元素,该元素取决于它是“ init”值的最偶数组还是最奇数组。

数组总是按“ init”值升序排列。

注意 "odd"或者"even"从的奇怪/均匀度测定"init"值,但的奇怪/均匀性基团即初始化值落入。在此示例中,第一组初始化值是“ 3”,因此所有带有的项"init":"3"都标记为"odd"。第二组将是“偶数”组,因此标记为“偶数”

Mar*_*yer 5

它并不经常使用,但像map和这样的函数forEach需要this在回调中使用可选的最终argumnet 。您可以利用此优势在继续循环时保持状态。

例如:

let a = [
    { "init": 3 },
    { "init": 3 },
    { "init": 3 },
    { "init": 5 },
    { "init": 6 },
    { "init": 6 },
    { "init": 7 },
    { "init": 8 }
  ]

let res = a.map(function({init}) {
    if (this.last !== init) this.even = !this.even
    this.last = init
    return {init, group:this.even ? "even": "odd" }
}, {last: undefined, even:true} )

console.log(res)
Run Code Online (Sandbox Code Playgroud)

注意事项:由于依赖于this,因此您不能使用箭头函数进行回调。