javascript – 从匹配数组的嵌套数组中获取名称

我有一些数组,如果它们包含相似的值,我想返回那些数组的名称.


    var x = {
      "food": ['bacon', 'cheese', 'bread', 'tomato'],
      "utilities": ['plates', 'forks', 'spatulas'],
      "guests": ['john', 'matt', 'bill']
    },
    y = ['bacon', 'tomato', 'forks'];

我有我的变量x,它有多个数组,名称为food,或utilities或guest. y包含的所有值都是x变量中某些数组中的某些值.我需要返回其数组中包含培根,番茄和叉子的数组的名称.所以对于这个例子,我需要返回:[“food”,“utilities”].


    function getContainerName(obj, values) {
      return Object.keys(obj).find(function(key) {
        return values.every(value => obj[key].find(function(elem) {
          return elem === value;
        }));
      });
    }
    console.log(getContainerName(x, y));

通过此功能抛出它们时,我收到错误*********.我该如何去获得一系列[“食物”,“实用工具”]?

最佳答案
Object.keys上的简单reduce()将完成这项工作

var x = {
    "food": ['bacon', 'cheese', 'bread', 'tomato'],
    "utilities": ['plates', 'forks', 'spatulas'],
    "guests": ['john', 'matt', 'bill']
  },
  y = ['bacon', 'tomato', 'forks'];

let res = Object.keys(x).reduce((a, b) => {
  if (x[b].some(v => y.includes(v))) a.push(b);
  return a;
}, []);

console.log(res);

对于您的评论 – 使用var和normal函数:

var res = Object.keys(x).reduce(function (a, b) {
    if (x[b].some(function (v) {
            return y.indexOf(v) !== -1;
        })) a.push(b);
    return a;
}, []);

转载注明原文:javascript – 从匹配数组的嵌套数组中获取名称 - 代码日志