在javascript中将重复的数组对象值替换为另一个

时间:2017-02-08 15:34:44

标签: javascript arrays

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

2 个答案:

答案 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);