【问题标题】:search array without duplicates React.js [duplicate]搜索没有重复的数组 React.js [重复]
【发布时间】:2016-03-24 05:21:18
【问题描述】:

我有一个这样的对象数组:

arr = [
    {name: 'Igor', ....},
    {name: 'Anton', .... },
    {name: 'Igor', .... },
    {name: 'Peter', .... },
    {name: 'Igor', .... }
]

我需要从 atrray 中获取所有名称,不能重复。我试着看起来像这样

var names = [];
arr.forEach((item) => {
  if (!names.some(val => val === item)) {
    names.push(item.name);
  }
}

但是我得到了所有的名字,包括重复的名字

更新:我正在使用 React 如果我只推names.push(item.name); 来排列一切正常,我会得到数组[Igor, Anton, Peter]。但!如果我推送这样的项目:

chat.forEach((item) => {
  if (names.indexOf(item.name) === -1) 
    names.push(<UserItem name={item.name} />);
});

我得到包含 5 个 li 元素的数组:Igor、Anton、Igor、Peter、Igor。 这不是重复的问题!

【问题讨论】:

    标签: javascript arrays search reactjs duplicates


    【解决方案1】:

    关闭,你只需要检查数组是否有欺骗

    var names = [];
    
    arr.forEach(function(obj) {
        if (names.indexOf(obj.name) === -1) names.push(obj.name);
    });
    
    var template = names.map(function(name) {
        return <UserItem name={name} />;
    });
    

    arr.forEach( v => names.indexOf(v.name) === -1 ? names.push(v.name) : null);
    

    【讨论】:

    • 谢谢,但对我来说不行,你能帮忙吗?我在问题中添加了信息
    • @IgorKim - 这样做,然后用map() 遍历names 以创建一个带有标记的数组
    • 谢谢,成功了!
    【解决方案2】:

    你可以使用names.indexOf,如果没有找到返回-1,那么你可以添加它。

    arr.forEach(function(item) {
        if (names.indexOf(item) === -1) {
          names.push(item);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2014-03-30
      • 1970-01-01
      • 2014-11-16
      • 2012-10-23
      相关资源
      最近更新 更多