我们花了将近一天半的时间来完成这项工作,但我仍然不确定它为什么会这样。如果有更好的方法可以实现,我很乐意听到它。在目前的状态下,我希望这有助于某人。
var newValuesArray = [];
var arrayIndex = [1, 4, 9];
var valuesArray = [["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"],
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
];
var roots = valuesArray.map(function(num) {
arrayIndex[num];
return arrayIndex;
});
for (var i = 0, len = roots.length; i < len; i++) {
newValuesArray.push(roots[i].map(function(num) {
return valuesArray[i][num];
}));
}
console.log(newValuesArray);
这是我正在寻找上面代码产生的结果:
[["One", "Four", "Nine"], ["B", "E", "J"]]
答案 0 :(得分:6)
var arrayIndex = [1, 4, 9];
var valuesArray = [
["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"],
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
];
// iterate over main array using map()
var newValuesArray = valuesArray.map(function(v) {
// iterate and filter values in inner array using filfer()
return v.filter(function(v1, i) {
// check index in arrayIndex
return arrayIndex.indexOf(i) > -1;
});
});
document.write('<pre>'+JSON.stringify(newValuesArray,null,3)+'</pre>');
&#13;
更新:如果您需要获取索引数组的相同顺序的值,请使用
var arrayIndex = [4, 9, 1];
var valuesArray = [
["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"],
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
];
// iterate over main array using map()
var newValuesArray = valuesArray.map(function(v) {
// iterate the index array
return arrayIndex.map(function(v1) {
// get value from inner array based on index
return v[v1];
});
});
document.write('<pre>'+JSON.stringify(newValuesArray,null,2)+'</pre>');
&#13;
答案 1 :(得分:0)
您可以考虑使用数组方法Array.prototype.map
来迭代valuesArray
和arrayIndex
。
var arrayIndex = [1, 4, 9],
valuesArray = [
["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"],
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
],
newValuesArray = valuesArray.map(function (a) {
return arrayIndex.map(function (b) {
return a[b];
});
});
document.write('<pre>' + JSON.stringify(newValuesArray, 0, 4) + '</pre>');
答案 2 :(得分:0)
一个解决方案:
var valuesArray = [
["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"],
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
["blue" , "green" , "yellow" , "orange" , "black" , "white" , "violet" , "pink" , "purple" , "grey" ]
];
/* the function ---------------------------------------------*/
var fn = function(indexed){
return indexed.reduce(function( trans , value){
trans.arr.forEach(function(curArray , i){
var curBranch = (trans.rep[i] = trans.rep[i] || []);
curBranch.push( curArray[value] )
})
return trans;
} , {arr : valuesArray , rep : []}).rep;
};
/* the samples -----------------------------------------------*/
var arrayIndex = [1, 4, 9];
document.write( JSON.stringify( fn(arrayIndex) ) );
arrayIndex = [9, 4, 1];
document.write('<br>' + JSON.stringify( fn(arrayIndex) ) );
arrayIndex = [9, 9, 3, 4, 1];
document.write('<br>' + JSON.stringify( fn(arrayIndex) ) );
arrayIndex = [99, 1, 2];
document.write('<br>' + JSON.stringify( fn(arrayIndex) ) );
&#13;