Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找到具有所需数组值的唯一键?_Javascript - Fatal编程技术网

Javascript 如何找到具有所需数组值的唯一键?

Javascript 如何找到具有所需数组值的唯一键?,javascript,Javascript,我想得到唯一的p,其中c值包含所有desire\u c值 所以这里对象的p:1的c值类似于1,2,3。这是match desire_c数组值,所以我想得到 {p:1}作为最终结果 在这里,我使用for循环进行循环:( var object=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}]; var_c=[1,2,3]; var-helper={}; for(对象中的变量o){ var电流=对象[o]; if(助手的类型[current.p]!

我想得到唯一的
p
,其中
c
值包含所有
desire\u c

所以这里
对象的
p:1的c值类似于1,2,3。这是match desire_c数组值,所以我想得到

{p:1}
作为最终结果

在这里,我使用for循环进行循环:(
var object=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}];
var_c=[1,2,3];
var-helper={};
for(对象中的变量o){
var电流=对象[o];
if(助手的类型[current.p]!='object'){
helper[current.p]={};
}
helper[current.p][current.c]=null;
}
for(辅助对象的变量c){
for(期望值中的变量d){
c[愿望_c[d]]
}
}
这只需检查数组中的每个
p
c
,并从
p
下哈希表中存储的数组中删除
c
。此数组初始化为所需数组,因此如果从中删除了所有元素(
!val.length
),则相应的键就是我们要查找的键


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

您可以使用此辅助函数查找唯一值:

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

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

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

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

var object=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}],
欲望c=[1,2,3],
地图=新地图,
后果
object.forEach(({p,c})=>map.has(p)?map.get(p).add(c):map.set(p,newset([c]));
result=[…map.keys()].filter(p=>desire_c.every(c=>map.get(p.has(c)));

console.log(result);
您可以为
p
获取一个映射,并为每个
c
值设置一个集合,然后检查是否所有需要的值都在一个集合中

var object=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}],
欲望c=[1,2,3],
地图=新地图,
后果
object.forEach(({p,c})=>map.has(p)?map.get(p).add(c):map.set(p,newset([c]));
result=[…map.keys()].filter(p=>desire_c.every(c=>map.get(p.has(c)));

控制台。日志(结果);
请检查下面的代码

 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});
             }
        }
    }
}
var\u c=[1,2,3];
VarData=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}];;
var helper={},element=“p”;
对于(变量i=0;i
请检查下面的代码

 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});
             }
        }
    }
}
var\u c=[1,2,3];
VarData=[{p:1,c:1},{p:1,c:2},{p:1,c:3},{p:2,c:1},{p:3,c:3}];;
var helper={},element=“p”;
对于(变量i=0;i
c[desire\u c[d]]
这应该做什么?不要在
中使用
来迭代数组!你能详细说明两个数组应该如何匹配吗?例如,
[3,1,2]
匹配
[1,2,3]
还是
[1,1,2,3]
[1,2,3]
那该怎么办呢?不要在
中使用
来迭代数组!你能详细说明两个数组应该如何匹配吗?例如,
[3,1,2]
匹配
[1,2,3]
还是
[1,1,2,3]
[1,2,3]
?你的答案是工作!但事实上我不理解你的工作代码,如果你有时间,你愿意向我解释更多细节吗!!!你的答案是工作!但事实上我不理解你的工作代码,如果你有时间,你愿意向我解释更多细节吗!!!
x.every(set.has(x))
并不意味着集是相等的…尝试将
{p:1,c:99}
添加到
对象
@georg,op没有说明结果是否应该完全包含值或仅仅包含所有值,即使对象包含重复项。
x.every(set.has(x))
并不意味着集是相等的…尝试添加
{p:1,c:99}
对象
@georg,op未说明结果是否应完全包含值或仅包含所有值,即使对象包含重复项。