javascript - 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
不重复循环等循环的情况下处理该部分。
解决方案
您可以先计数,然后将名称映射到调整后的计数。
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);
推荐阅读
- swift3 - 如何将操作按钮添加到 collectionView 的部分单元格中?
- yii - 在 Yii 2 中创建的缓存文件总是使用错误的权限
- r - 使用 ggplot 将形状分配给 n 行的 n-1 点
- json - Angular:通过 routerLink 传递复杂的 JSON
- matlab - 交换条件时,带有“或”运算符的 if 语句给出不同的结果
- mongodb - 从 MongoDB 中 sid=1 的评级中选择 avg(rate)
- html - Angular ng-repeat 排序成几个 div
- node.js - 是否从 botbuilder-cognitiveservices.js 中删除了 LuisActionBinding.js
- asp.net - Asp.net core 2 与 angular 6 模板
- java - 找不到 Spring JPA 存储库转换器