数组转换/操作

时间:2015-10-25 17:28:22

标签: javascript arrays underscore.js lodash

我有一个像这样的数组:

cY8QsCeJ9XktaZeHDncE7k1y3Hsq2Zd1FqKM/mi

我有第二个整数数组:

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

我想在没有循环的情况下获取此数组:

array2=[1,3]

有人知道如何使用javascript进行操作吗?

提前致谢

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以使用.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);




答案 2 :(得分:0)

一个简单的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

答案 3 :(得分:0)

所有答案都很好。如果我可以使用tsc建议另外一个替代方案,因为这似乎适合于一个关键:值对解决方案。

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

答案 4 :(得分:0)

使用_.indexBy函数索引第一个数组:

public void MyMethod<U, T>(U items) where U : List<T>
{
    if (typeof(T) is int) { ((List<int>)items).Sum() }
    if (typeof(T) is double) { ((List<double>)items).Sum() }
    //Repeat for the remaining numeric types.
}