3

我想在Javascript中匹配整個數組。我有一個userInput數組,我需要在多維數組中找到匹配的數組並輸出匹配。尋找在JavaScript中的多維數組中的匹配

var t1 = [0,0,0]; 
var t2 = [1,0,0]; 
var t3 = [0,0,1]; 
var userInput = [0,0,0]; 
var configs = [t1, t2, t3]; 

我想找到一種方法將userInput匹配到其他數組之一併輸出匹配的數組。 With underscore.js我可以一次找到一個沒有循環的匹配,但是返回一個布爾值。我需要找到configs數組內的匹配數組。 我可以嵌套循環來通過配置,但我無法弄清楚如何將它匹配到userInput。

回答

0

您可以使用和some組合every

var t1 = [0,0,0]; 
 
var t2 = [1,0,0]; 
 
var t3 = [0,0,1]; 
 
var userInput = [0,0,0]; 
 
var configs = [t1, t2, t3]; 
 
var inputPresent = configs.some(a => userInput.every((u,i) => a[i] == u)); 
 
console.log(inputPresent);

如果你想了解當前輸入的編號,你可以只包括三元

var t1 = [0,0,0]; 
 
var t2 = [1,0,0]; 
 
var t3 = [0,0,1]; 
 
var userInput = [0,0,0]; 
 
var configs = [t1, t2, t3]; 
 
var inputIndex = -1; 
 
configs.some((a,n) => userInput.every((u,i) => a[i] == u)?(inputIndex=n,true):false); 
 
console.log(inputIndex);

0

這項工作?

var result = _.find(configs, function(t) { 
    return _.isEqual(userInput, t); 
}); 

如果您需要了解指數:

var index = -1; 
_.some(configs, function(t, idx) { 
    if (_.isEqual(userInput, t)) { 
    index = idx; 
    return true; 
    } 
}); 
// index = -1 if not found, else the first index of configs that matches the userInput 
1

您可以使用Array#findIndex找到數組中的匹配配置的索引。使用Array#every查找相同的配置。

var t1 = [0,0,0]; 
 
var t2 = [1,0,0]; 
 
var t3 = [0,0,1]; 
 
var userInput = [0,0,1]; // this will fit t3 (index 2) 
 
var configs = [t1, t2, t3]; 
 

 
var result = configs.findIndex(function(arr) { 
 
    return arr.every(function(value, i) { 
 
    return value === userInput[i]; 
 
    }); 
 
}); 
 

 
console.log(result);

1

給定的輸入可以使用Array.prototype.find()Array.prototype.toString()Array.prototype.join()

var t1 = [0,0,0]; 
 
var t2 = [1,0,0]; 
 
var t3 = [0,0,1]; 
 
var userInput = [0,0,0]; 
 
var configs = [t1, t2, t3]; 
 

 
var result = configs.find(arr => arr.join() === userInput.join()); 
 

 
console.log(result);

0

我會關注其中可能有重複的地方。如果你可以做一個能夠可靠地測試等式的函數,那麼這只是一個過濾器。

var matches = configs.filter(config => _.isEqual(config, userInput)); 
var match = matches[0]; 

如果你想投資到使用庫的更多,你可以使用類似find

var match = _.find(configs, config => _.isEqual(config, userInput)); 
相關問題