2015-10-15 14 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)));

相關問題