var indianTeam = [{
firstName: "KL",
lastName: "Rahul"
}, {
firstName: "Jayant",
lastName: "Yadav"
}, {
firstName: "Umesh",
lastName: "Yadav"
}];
在上面的数组中,你可以找到第二个和第三个中的姓氏有重复值" yadav"所以我想找到第二个副本(即umesh yadav)并用它的名字替换它,让jayant yadav成为唯一的。
到目前为止我使用的功能
services.filterPlayers = function() {
var i,j,tempArray = [];
for (i = 0; i < indianTeam.length; i++) {
tempArray.push(indianTeam[i].lastName);
}
tempArray = tempArray.filter(function(elem, pos){
if (tempArray.indexOf(elem) !== pos) {
return true;
}
});
return tempArray;
};
场景一:我过滤掉了重复的yadav,并使用==条件符号将唯一值返回临时值,
场景二:只有yadav使用!==条件
返回临时如何用firstname替换重复的yadav并推送到临时数组中的相同位置?
参考:codepen link
答案 0 :(得分:1)
这为您提供了一个唯一的lastName数组:
new Set(indianTeam.map(el=>el.lastName));
这会创建一个唯一的lastName,fallback firstName数组:
indianTeam=indianTeam.map((el,i)=>indianTeam.findIndex(e=>e.lastName==el.lastName)===i?el.lastName:el.firstName);
http://jsbin.com/sozeficafa/edit?console
你可以使用map函数,用返回的元素替换每个元素。代码检查元素是否是第一个找到的,如果是,它会保留它,如果没有,它会被第一个替换。
答案 1 :(得分:1)
您可以为lastName
使用哈希表并检查是否已设置。如果设置,请选择firstName
,否则lastName
。
var indianTeam = [{ firstName: "KL", lastName: "Rahul" }, { firstName: "Jayant", lastName: "Yadav" }, { firstName: "Umesh", lastName: "Yadav" }, { firstName: "jane" }, { firstName: "joe" }],
hash = Object.create(null),
result = indianTeam.map(function (a) {
if (!a.lastName || hash[a.lastName]) {
return a.firstName;
}
hash[a.lastName] = true;
return a.lastName;
});
console.log(result);