2015-10-25 113 views
-3

我有一个阵列像这样的:阵列变换/操纵

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

我有整数的第二阵列:

array2=[1,3] 

我想获得该阵列不为一个循环:

arrayResult = ['value1', 'value3'] 

有人知道如何用javascript做到这一点吗?

在此先感谢

+2

那你试试这么远吗? – 1252748

+0

array1中值域的要点是什么?它总是索引+1吗?如果是这样,你不需要它,可以只有array1 = ['value1','value2',...] – clocksmith

+0

描述并不表示array2代表什么 – charlietfl

回答

2

与相应value地图中array2到元件的label属性的元素在array1

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

谢谢,这就是我正在寻找的 – bokzor

+0

@bokzor注意'.find'是新方法,在IE中不支持https://goo.gl/blSYko –

+0

是的。但我更喜欢第一个。但是,无论如何感谢:-) – bokzor

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

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

0

很好的答案。如果我可能会建议使用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)); 

当然,这假定该键:第一阵列的值结构不会变得更复杂,并且可以在较简单的形式被写入。

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

只是指数使用_.indexBy函数的第一个数组:

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