如何找到具有欲望数组值的唯一键?

时间:2018-01-11 16:15:01

标签: javascript

我希望获得pc个值包含所有desire_c值的唯一object's

所以这里{p:1} p:1 的c值类似于1,2,3。那就是匹配desire_c数组值,所以我想得到

var object = [{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}]; var desire_c = [1,2,3]; var helper = {}; for(var o in object) { var current = object[o]; if(typeof helper[current.p] != 'object') { helper[current.p] = {}; } helper[current.p][current.c] = null; } for(var c of helper) { for(var d in desire_c) { c[desire_c[d]] } }作为最终结果!

这里我循环使用 for loop :(

height: 240px;

4 个答案:

答案 0 :(得分:0)

您可以使用此辅助功能查找唯一值:

function findKey(objects, desire){
    const map = {}; // Creates a new object to map all keys to all their values, instead of having an array of objects
    objects.forEach(obj => {
        map[obj.p] = map[obj.p] || []; // Ensures the key has an array of values before pushing a new value
        map[obj.p].push(obj.c);
    });

    return Object.keys(map).find(key => desire.every(des => map[key].includes(des))); // Tries to find a key that contains all desired values
}

然后,就这样称呼它:

findKey(object, desire_c); // Returns 1 for your example

答案 1 :(得分:0)

您可以为p创建一个地图,为每个c值设置一个集合,然后检查是否所有需要的值都在一个集合中。

var object = [{ p: 1, c: 1 }, { p: 1, c: 2 }, { p: 1, c: 3 }, { p: 2, c: 1 }, { p: 3, c: 3 }],
    desire_c = [1, 2, 3],
    map = new Map,
    result;

object.forEach(({ p, c }) => map.has(p) ? map.get(p).add(c) : map.set(p, new Set([c])));

result = [...map.keys()].filter(p => desire_c.every(c => map.get(p).has(c)));

console.log(result);

答案 2 :(得分:0)

请检查以下代码。

 var desire_c = [1,2,3];
 var data=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}];;
 var helper = {},element = "p";

for (var i = 0; i < data.length; i++) {
    if (!helper[data[i][element]])
        helper[data[i][element]] = [];
    helper[data[i][element]].push(data[i]["c"]);
};

for (key in helper) {
    if (helper.hasOwnProperty(key)) {
        if (helper[key].length){
            var arr=helper[key];
            if(JSON.stringify(arr)==JSON.stringify(desire_c))
             {

                 console.log({"p":key});
             }
        }
    }
}

答案 3 :(得分:-1)

 const hash = {};

 for(const {p, c} of object){
  if(!hash[p]){
   hash[p] = desire_c;
  }
  hash[p] = hash[p].filter(n => n !== c);
 }

 const result = [];
 for(const [key, val] of Object.entries(hash))
   if(!val.length) result.push(key);

这只是遍历数组中的每个pc,并从存储在c下的哈希表中的数组中删除p。此数组初始化为您想要的数组,因此如果从中删除所有元素(!val.length),则相应的键是我们要查找的键。