我有一个阵列像这样的:阵列变换/操纵
array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}]
我有整数的第二阵列:
array2=[1,3]
我想获得该阵列不为一个循环:
arrayResult = ['value1', 'value3']
有人知道如何用javascript做到这一点吗?
在此先感谢
我有一个阵列像这样的:阵列变换/操纵
array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}]
我有整数的第二阵列:
array2=[1,3]
我想获得该阵列不为一个循环:
arrayResult = ['value1', 'value3']
有人知道如何用javascript做到这一点吗?
在此先感谢
与相应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);
一个简单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"]
很好的答案。如果我可能会建议使用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));
只是指数使用_.indexBy函数的第一个数组:
var indexedArray1 = _.indexBy(array1, "value");
_.map(array2, function(x) { return indexedArray1[x].label; });
那你试试这么远吗? – 1252748
array1中值域的要点是什么?它总是索引+1吗?如果是这样,你不需要它,可以只有array1 = ['value1','value2',...] – clocksmith
描述并不表示array2代表什么 – charlietfl