如何在 JavaScript 中检查对象数组中是否存在某个值?

问题描述 投票:0回答:7

我有一个对象数组:

var arrObj = [
    { a: "11", b: "Test1" },
    { a: "22", b: "Test2" },
    { a: "33", b: "Test1" },
    { a: "44", b: "Test3" },
];

我想检查是否存在具有特定属性值

a
的对象。如果存在,那么它应该返回属性
b
的值。
a
的值始终是唯一的。

例如,如果我正在寻找

"11"
,那么它应该返回
"Test1"

javascript arrays javascript-objects
7个回答
8
投票

Array.prototype.find正是您正在寻找的东西 - 在这种情况下它比

Array.prototype.filter
更好,因为一旦找到第一个匹配项它就会停止迭代

const data = [
  {"a": "11", "b":"Test1"},
  {"a": "22", "b":"Test2"},
  {"a": "33", "b":"Test1"},
  {"a": "44", "b":"Test3"},
]

console.log(data.find(x => x.a == 11).b)
// Test1

要小心处理查询的项未找到的情况,否则很容易遇到 null/undefined 错误 -

const data = [
  {"a": "11", "b":"Test1"},
  {"a": "22", "b":"Test2"},
  {"a": "33", "b":"Test1"},
  {"a": "44", "b":"Test3"},
]

const result = data.find(x => x.a == 11)

if (result == null)
  console.log("not found")
else
  console.log(result.b) // Test1


2
投票

这个问题可以有多种解决方案,仅使用数组方法。可以使用

filter
find
findIndex
等方法。

下面是使用

findIndex
的片段。如果数组中存在该元素,则返回该对象的索引,如果不存在,则返回-1

var arrObj = [{
    "a": "11",
    "b": "Test1"
  },
  {
    "a": "22",
    "b": "Test2"
  },
  {
    "a": "33",
    "b": "Test1"
  },
  {
    "a": "44",
    "b": "Test3"
  }
];

var m = arrObj.findIndex(function(item) {
  return item.a === "11";
});
console.log(m)


2
投票

考虑到您将具有相同的预定义属性

a
b
,您可以简单地使用
find
来达到您的目的。以下示例演示了如何在数组上使用
find
方法 -

const arrObj = [
    { a: "11", b: "Test1" },
    { a: "22", b: "Test2" },
    { a: "33", b: "Test1" },
    { a: "44", b: "Test3" },
];

// This will return the value of b or undefined
const newArrObj = arrObj.find(obj => obj.a === "11")?.b;

console.log(newArrObj);


0
投票

我希望这段代码是你想要的:

var checkAndReturn =function (arr, n){
        for(let i = 0; i < arr.length; i++){
            if(arr[i]["a"] === n) return arr[i]["b"];
        }
}

使用它:

checkAndReturn(arrObj, "11");

0
投票

仅使用循环和检查,希望此代码对您有用!

arrObj.forEach(function(a) {
    a = Object.keys(a).map(function(key){
        return a[key];
    });

    a.forEach(function(v2, k2, d){

        if(d[0] == 11) {
            console.log(d[1]);
        }
    });
});

0
投票

您可以将其设为具有箭头功能的单行线。

var arrObj=[
    {"a" : "11", "b":"Test1"},
    {"a" : "22", "b":"Test2"},
    {"a" : "33", "b":"Test1"},
    {"a" : "44", "b":"Test3"}
];

console.log(arrObj.filter(obj => obj.a == 11))


-1
投票

这可能是在 JavaScript 对象数组中按 id 查找对象

的重复

因此,看看该线程,这应该适合您。

var result = $.grep(arrObj, function(e){ return e.a == '11'; });
console.log(result[0].b);

您可以为第一行创建一个函数,并通过您要查找的 Id 来调用它。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.