在JavaScript中寻找多维数组中的匹配项

时间:2017-05-11 20:57:33

标签: javascript jquery arrays multidimensional-array underscore.js

我正在尝试在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相匹配。

5 个答案:

答案 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)

您可以使用someevery

的组合

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