我有一个对象。我想检查一下是否存在特定属性。
问题是:我正在寻找的属性可以是任何地方,即:对象的结构是不可取的。
前:
obj1 = { "propIWant": "xyz" }
obj2 = { "prop1": [ {"key": "value"}, {"key":"value"}, 1, {"key": { "propIWant": "xyz"}}]
我尝试过以下内容,但似乎失败了:
var lastTry = function(entry){
// if entry is an array
if(typeof entry === 'object' && entry instanceof Array){
for(var i in entry)
entry[i] = this.lastTry(entry[i]);
}
// if entry is a normal object
else if(typeof entry === 'object'){
// iterate through the properties of the entry
for(var key in entry){
console.log('key is: ', entry[key])
// in case the entry itself is an array
if(typeof entry[key] === 'object' && entry[key] instanceof Array){
for(var i in entry[key]){
entry[key][i] = this.lastTry(entry[key][i]);
}
}
// in case the entry is a simple object
else if(typeof entry[key] === 'object') {
console.log('entry[key] is an object', entry[key], key)
// if we directely find the property.. modify it
if(entry[key].hasOwnProperty('_internal_url')){
**entry[key]['_internal_url'] = "http://localhost:4000"+entry[key]['_internal_url'];** <-- My objective
}
else{
// call this method again on that part
// for(var i in entry[key]){
// if(typeof entry[key][i] === 'object')
// entry[key][i] = this.lastTry(entry[key][i]);
// }
}
}else{
console.log('not found')
}
}
}
}
有人可以帮我解决一下吗?我找到了以下内容:Find by key deep in a nested object但是,我想要编辑属性并使用修改后的属性返回整个对象,而不仅仅是具有该属性的对象的子集。
答案 0 :(得分:0)
你试过了吗?
obj1.hasOwnProperty('propIWant')
答案 1 :(得分:0)
如果您想检查属性是否存在,可以对对象进行字符串化,然后检查字符串中是否存在值。
var obj2 = {
"prop1": [{
"key": "value"
}, {
"key": "value"
},
1, {
"key": {
"propIWant": "xyz"
}
}
]
}
var key = 'propIWant';
var key2 = 'propIWant1';
function isPropInObject(obj, prop) {
var r = new RegExp(prop + "\":")
var match = JSON.stringify(obj).match(r);
return match && match.length > 0 ? true : false
}
console.log(isPropInObject(obj2, key))
console.log(isPropInObject(obj2, key2))
&#13;
答案 2 :(得分:0)
好吧,检查道具是否是自己的对象并使用递归函数来找到&#34; deep&#34;您正在寻找的房产?
function findProp(obj, lookFor) {
for (var prop in obj) {
if (prop == lookFor) return obj[prop]
if (typeof obj[prop] == 'object') {
var checkNested = findProp(obj[prop], lookFor)
if (checkNested) return checkNested
}
}
return false
}
适用于console.log(findProp(obj2, 'propIWant'))
演示 - &gt;的 http://jsfiddle.net/zqcurg70/ 强>
答案 3 :(得分:0)
可以通用方式访问数组和对象数据:
obj[key] and arr[pos];
这样可以简化代码。请注意,如果是对象,key
可以是字符串,如果是数组,则var found = 0;
var findProp = function(entry) {
if(typeof entry === 'object')
for(var key in entry) {
findProp(entry[key]);
if( entry[key].hasOwnProperty('_internal_url')) {
found++;
entry[key]['_internal_url'] = "http://localhost:4000" + entry[key]['_internal_url'];
}
}
}
console.log('found ' + found + 'occurrences');
可以是数字。
以下版本仅以深度优先逻辑搜索元素和最终子元素(数组和对象)。
Select * from Notification
left join UserNotification on Notification.id = UserNotification.NotificationId
where UserNotification.id is null