数组 transformation/manipulation
Array transformation/manipulation
我有一个这样的数组:
array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}]
我有第二个整数数组:
array2=[1,3]
我想在没有循环的情况下获得这个数组:
arrayResult = ['value1', 'value3']
有人知道如何使用 javascript 吗?
提前致谢
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);
一个简单的 for-loop 就足够了。将来你应该认真 post 一些代码来展示你已经尝试过的东西。
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"]
将array2
中的元素映射到array1
中元素的label
属性对应的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);
所有答案都很好。如果我可以建议使用 Map
的另一种选择,因为这似乎适合 key:value 对解决方案。
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 ) );
只需使用 _.indexBy 函数索引第一个数组:
var indexedArray1 = _.indexBy(array1, "value");
_.map(array2, function(x) { return indexedArray1[x].label; });
我有一个这样的数组:
array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}]
我有第二个整数数组:
array2=[1,3]
我想在没有循环的情况下获得这个数组:
arrayResult = ['value1', 'value3']
有人知道如何使用 javascript 吗?
提前致谢
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);
一个简单的 for-loop 就足够了。将来你应该认真 post 一些代码来展示你已经尝试过的东西。
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"]
将array2
中的元素映射到array1
中元素的label
属性对应的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);
所有答案都很好。如果我可以建议使用 Map
的另一种选择,因为这似乎适合 key:value 对解决方案。
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 ) );
只需使用 _.indexBy 函数索引第一个数组:
var indexedArray1 = _.indexBy(array1, "value");
_.map(array2, function(x) { return indexedArray1[x].label; });