2015-10-15 15 views
4

完成此任务需要将近一天半的时间,我仍然不确定它为什么可行。如果有更好的方法来完成,我很乐意听到它。在目前的状态下,我希望这有助于某人。使用一个数组的元素作为索引来创建新数组,以便选择不同数组中的元素 - JavaScript

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

将'arrayIndex'总是按升序排列? 'arrayIndex = [4,9,1];'是什么预期的结果? –

+0

@PaulRoub,arrayIndex可以以任何顺序。 –

回答

6

您可以使用map()filter()

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

更新:在情况下,如果您需要在指数数组一样为了得到值,则使用

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

+1

谢谢,@ pranav-c-balan! –

+0

@QuintRahaman:很高兴帮助:) –

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

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

相关问题