替换或追加数组值

替换数组中的项或追加项(如果不存在)。

  • 使用扩展运算符(...)创建数组的浅拷贝。
  • 使用Array.prototype.findIndex()找到满足提供的比较函数compFn的第一个元素的索引。
  • 如果找不到这样的元素,则使用Array.prototype.push()将新值追加到数组中。
  • 否则,使用Array.prototype.splice()将找到的索引处的值替换为新值。
const replaceOrAppend = (arr, val, compFn) => {
  const res = [...arr];
  const i = arr.findIndex(v => compFn(v, val));
  if (i === -1) res.push(val);
  else res.splice(i, 1, val);
  return res;
};

const people = [ { name: 'John', age: 30 }, { name: 'Jane', age: 28 } ];
const jane = { name: 'Jane', age: 29 };
const jack = { name: 'Jack', age: 28 };
replaceOrAppend(people, jane, (a, b) => a.name === b.name);
// [ { name: 'John', age: 30 }, { name: 'Jane', age: 29 } ]
replaceOrAppend(people, jack, (a, b) => a.name === b.name);
// [
//   { name: 'John', age: 30 },
//   { name: 'Jane', age: 28 },
//   { name: 'Jack', age: 28 }
// ]