当前位置: 首页 > 知识库问答 >
问题:

JS遍历对象并检查另一个对象是否包含其值

傅献
2023-03-14

我试图通过JS对象(1)来找出另一个对象(2)上是否存在值,并返回对象(2)的find值。

var returnObj = [];
    selectedValues.forEach(function(value, key){
        var found = valuesObject.some(function (el) {
            if (el.item_id === value){
                return el.item_id;
            }
        });
        console.log(found);
    });

在这种情况下,我只能通过得到真/假来找出它是否存在,我也试过这个

var returnObj = [];
    selectedValues.forEach(function(value, key){
        console.log(_.intersection(valuesObject, value));
    });

但是在这种情况下,它只返回空数组,而不是对象(1)值找到的对象(2)值

共有3个答案

张瀚漠
2023-03-14

也许我设置错误,但是看到retransObj是一个数组filtering似乎是一个不错的选择。例如,与Set组合使用:

let set = new Set(valuesObject.map(o=>o.item_id)),
    returnObj = selectedValues.filter(s=>set.has(s));

例子:

let selectedValues = ['aaa', 'bbb', 'ccc', 'ddd'],
	valuesObject = [ {item_id:'ddd'}, {item_id:'eee'}, {item_id:'bbb'}];


let set = new Set(valuesObject.map(o=>o.item_id)),
	returnObj = selectedValues.filter(s=>set.has(s));

console.log(returnObj);
鲁龙野
2023-03-14

只要保持简单和基本:

for (var i = 0; i < selectedValues.length; i++) {
    for (var j = 0; j < valuesObject.length; j++) {
        if (selectedValues[i] === valuesObject[j].item_id) {
            return valuesObject[j].item_id;
        }
    }
}

如果你喜欢一行:

return selectedValues.length && selectedValues.map(value => valuesObject.find(v => v.item_id === value))[0]
秦楚
2023-03-14

如果在.forEach调用中执行return,则只会从传递给forEach函数的回调中返回,而不会返回封闭函数。您可以使用标准for循环,在该循环中,您可以从中返回。

假设您有一个要在第二个对象中查找的“值”列表:

const values = [/*...*/];

Object.keys(secondObject).forEach(key => {
  const value = secondObject[key];

  if (values.includes(value)) {
    /* secondObject has a property with the values you are looking for */
  }
});

Object.keys提供对象的属性键数组。根据您的环境,您还可以使用Object.values(),这将返回给定对象的值数组(不是键)。

 类似资料:
  • 问题内容: 我正在玩Java的反射API,并尝试处理一些字段。现在,我要确定字段的类型。字符串很简单,只需执行即可。其他非派生类也是如此。但是,如何检查派生类?例如作为的子类。我无法找到任何或方法。我是否需要遍历所有人并自己找到超人? 问题答案: 您需要此方法: 一般情况下,(以上)应替换为并应替换为 从JavaDoc: 确定此对象表示的类或接口是否与指定参数表示的类或接口相同或超类或超接口。如果

  • 问题内容: 有没有一种快速的方法来检查对象是jQuery对象还是本机JavaScript对象? 例: 显然,上面的代码有效,但并不安全。您可能会向对象添加选择器键并获得相同的结果。有没有更好的方法来确保该对象实际上是jQuery对象? 符合 问题答案: 您可以使用运算符: 说明 :该函数(又名)被实现为构造函数。构造函数将以前缀调用。 调用时,内部jQuery将此转换为1。JavaScript继续

  • 我想检查像下面这样的JSON对象中的某个键是否包含某个值。假设我想检查任何对象中的键“name”是否具有值“blofeld”(这是真的)。我怎么能那样做?

  • 问题内容: 我想遍历数组中包含的对象并更改每个对象的属性。如果我这样做: 控制台应该调出数组中的每个对象,对吗?但实际上,它仅显示第一个对象。如果我在循环外控制台记录阵列,则所有对象都会出现,因此肯定还有更多对象。 无论如何,这是下一个问题。如何使用循环访问数组中的Object1.x? 这将返回“未定义”。循环外的控制台日志再次告诉我,所有对象都具有“ x”的值。如何在循环中访问这些属性? 建议我

  • 假设每种颜色总是有一辆车。所以我总是在找一辆车,不多也不少。 如何确保始终有一个对象被找到并返回?

  • 请看do while循环,我认为注释是不言自明的。我想检查该集合是否设置了所有具有符号a、b、c、d的卡片(借助数组或其他任何东西实现它)。