检查Javascript对象中是否存在键和值

检查Javascript对象中是否存在键和值,javascript,json,Javascript,Json,假设我有: var original = { 0: { id : 158 }, 1: { id : 159 } } var newSeries = { 0: { id : 158, name: "Jason", lastname: "Smith", status : "active" }, 1: {

假设我有:

var original = {

    0: {
        id : 158    
    },
    1: {
        id : 159    
    }

}

var newSeries = {

    0: {
        id : 158,
        name: "Jason",
        lastname: "Smith",
        status : "active"   
    },
    1: {
        id : 159    ,
        name: "Rebecca",
        lastname: "Smith",
        status : "terminated"   
    }

}

例如,我想知道
id
#158 from
newSeries
是否存在于
original
中,我该怎么做?我找到了一个部分解决方案,使用中的
操作符,但只比较它们的键,而不比较键和值

如果您打算进行大量这样的处理,我建议您使用。它有通过传递lamda函数、过滤、排序、合并、收敛和许多其他功能来查找值的方法

带下划线的一行:

_(original).find(function(x) { return x.id == 159; })
试试这个:

for (var n in newSeries) {
   console.log('id ' + 
               newSeries[n].id + 
               ' exists: ' +
               (original[n].id === newSeries[n].id));   
}

您必须循环检查每个键和值,以测试id是否存在

比如说

var myId = 158;
for (var key in original) {
    if (original[key].id === myId) {
        // here your id has been found
    }
}
如果您不想像这样循环遍历对象,则必须稍微更改数据结构。您可以将ID用作原始对象中的键,并按如下方式搜索:

var original = {

    158: {
        id : 158    
    },
    159: {
        id : 159    
    }
};

var myId = 158;

if (myId in original) {
    // here your id has been found
}

如果您的目标是ES5:

function isValueInObject(value, object) {

    return Object.keys(object).map(function (key) {
        return object[key];
    }).some(function (_value) { 
        return _value === value; 
    });

}

console.log(isValueInObject('bar', {foo: 'bar'})) // true
console.log(isValueInObject('baz', {foo: 'bar'})) // false

在循环中,如果键在
,则检查
newSeries[i]['id']
处的值鉴于当前数据的结构,除了迭代所有键并检查id匹配的强力方法之外,没有其他方法可以找到id值。您可以重新构造数据,以按id添加索引,以便在需要时进行直接id查找。您可以使用数组和。不管怎样,你到底有什么问题?你一定试过什么了。为什么要将
original[n].id===newSeries[n].id
转换为布尔表达式?这很有趣,虽然它不会返回布尔表达式,但会返回另一个与我们要查找的id匹配的对象。只需添加!!我发现这是最简单的解决方案。