代码之家  ›  专栏  ›  技术社区  ›  LeBlaireau

JavaScript检查对象数组中是否存在任何值(重复)

  •  0
  • LeBlaireau  · 技术社区  · 6 年前

    我有一个这样的阵列:

    array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}]
    

    我有第二个整数数组:

    array2=[1,3]
    

    我想获得这个数组,不需要循环:

    arrayResult = ['value1', 'value3']
    

    有人知道如何使用javascript吗?

    提前谢谢

    0 回复  |  直到 9 年前
        1
  •  2
  •   user663031user663031    9 年前

    将元素映射到 array2 label 元素的属性 array1 与相应的 value 以下内容:

    array2                      // Take array2 and
      .map(                     // map
        function(n) {           // each element n in it to
          return array1         // the result of taking array1
            .find(              // and finding
              function(e) {     // elements
                return          // for which 
                  e.value       // the value property
                  ===           // is the same as 
                  n;            // the element from array2
              }
            )
            .label              // and taking the label property of that elt
          ;
        }
      )
    ;
    

    没有评论,在ES6中:

    array.map(n => array1.find(e => e.value === n).label);
    
        2
  •  1
  •   Oleksandr T.    9 年前

    你可以用 .filter .map ,就像这样

    var array1 = [
        {value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}
    ];
    
    var array2 = [1, 3];
    
    var arrayResult = array1.filter(function (el) {
      return array2.indexOf(el.value) >= 0;
    }).map(function (el) {
      return el.label;
    });
    
    console.log(arrayResult);
        3
  •  0
  •   1252748    9 年前

    简单的 for-loop 就够了。将来你应该认真地发布一些代码来展示你所做的尝试。

    var array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}];
    var array2=[1,3];
    var result = [];
    
    for (var i = 0; i < array2.length; i++){
      result.push(array1[array2[i]-1].label);
    }
    console.log(result); //["value1", "value3"]
    

    JSBIN

        4
  •  0
  •   Mogsdad    9 年前

    答案都很好如果我能再推荐一种 Map 因为这似乎适合于键:值对解决方案。

    var arr1 = [ {value:1, label:'value1'}, {value:2, label:'value2'}, {value:3, label:'value3'} ];
    var arr2 = [1, 3];
    
    // create a Map of the first array making value the key.
    var map = new Map( arr1.map ( a => [a.value, a.label] ) );
    
    // map second array with the values of the matching keys
    var result = arr2.map( n => map.get ( n ) );
    

    当然,这假设第一个数组的key:value结构不会变得更复杂,并且可以用更简单的形式编写。

    var arr1 = [[1,'value1'], [2,'value2'], [3,'value3']]; // no need for names
    var arr2 = [1, 3];
    
    var map = new Map( arr1 ); // no need to arr1.map ;
    var result = arr2.map( n => map.get ( n ) );
    
        5
  •  0
  •   LukáÅ¡ Havrlant    9 年前

    只需使用索引函数索引第一个数组:

    var indexedArray1 = _.indexBy(array1, "value");
    _.map(array2, function(x) { return indexedArray1[x].label; });