首页 > 解决方案 > Javascript - 比较两个数组。如果在两者中都找到对象,请更改它

问题描述

我可以使用以下代码检查一个数组的对象是否也存在于另一个数组中(并在其自己的数组中显示重复项):

var target = ['alfredo', 'john', 'sebas', 'paul', 'lionel', 'sebas2'];
var src = ['paul', 'michael', 'sebas'];

var final = target.filter(function(val) {
  return src.indexOf(val) != -1;
});

console.log(final);

期望的输出:

但是,我不知道如何获得以下输出:

final = 数组 ["paul2", "michael", "sebas3"]

数组中的对象final应具有与数组中最初的顺序相同的顺序,src但是,如果要在数组中找到该对象,则应将target一个数字(从 2 开始)附加到此复制对象。如果name + number存在,则数字必须增加 1,直到在target

到目前为止我的尝试:

var final= [];

src.forEach(function(element) {
  if(target.includes(element))
    { newSrc = element+2; final.push(newSrc) } else { final.push(element) }
});

console.log(final);

但是,我不知道如何在number + 1不重复循环等循环的情况下处理该部分。

标签: javascriptarrays

解决方案


您可以先计数,然后将名称映射到调整后的计数。

var target = ['alfredo', 'john', 'sebas', 'paul', 'lionel', 'sebas2'],
    src = ['paul', 'michael', 'sebas'],
    count = target.reduce((c, s) => (k => (c[k] = (c[k] || 0) + 1, c))(s.match(/^\D+/)[0]), Object.create(null)),
    final = src.map(s => s + (count[s] ? count[s] + 1 : ''));

console.log(final);


推荐阅读