检查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 fromnewSeries
是否存在于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匹配的对象。只需添加!!我发现这是最简单的解决方案。