我正在尝试在Javascript中匹配整个数组。我有一个userInput数组,我需要在多维数组中找到匹配的数组并输出匹配。
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与其他数组之一匹配并输出匹配数组。 使用underscore.js我可以一次找到一个匹配而不循环,但是返回一个bool。
var result = _.isEqual(userInput,t1) returns true
我需要在configs数组中找到匹配的数组。 我可以嵌套循环来完成配置,但我无法弄清楚如何将它与userInput相匹配。
答案 0 :(得分: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 :(得分:1)
根据输入,您可以使用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);
days = list(set(df['day']))
days.sort()
day_no = list()
iter_no = list()
for index,day in enumerate(days):
counter=1
for dfday in df['day']:
if dfday == day:
iter_no.append(counter)
day_no.append(index+1)
counter+=1
df['day_no'] = pd.Series(day_no).values
df['iter_no'] = pd.Series(iter_no).values

答案 2 :(得分:0)
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);
答案 3 :(得分: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
答案 4 :(得分:0)
我会担心可能存在重复的地方。如果你可以创建一个可以可靠地测试相等性的函数,那么这只是一个过滤器。
var matches = configs.filter(config => _.isEqual(config, userInput));
var match = matches[0];
如果您想投资使用更多库,可以使用类似find
的内容var match = _.find(configs, config => _.isEqual(config, userInput));