我有一個json對象。我需要找到字符串,其中yes = 1並獲取有關它的信息(名稱,是....)。如何在節點js中做到這一點?在json樹節點中搜索js
{"1": {"name":'alex',
"yes":'1'},
"2": {"name":'andy',
"yes":'0'}}
或者有什麼辦法可以在像mysql這樣的對象中進行搜索嗎?
我有一個json對象。我需要找到字符串,其中yes = 1並獲取有關它的信息(名稱,是....)。如何在節點js中做到這一點?在json樹節點中搜索js
{"1": {"name":'alex',
"yes":'1'},
"2": {"name":'andy',
"yes":'0'}}
或者有什麼辦法可以在像mysql這樣的對象中進行搜索嗎?
假設你只想檢查對同一級別的屬性(即沒有嵌套的對象你也想遞歸搜索),你可以使用一個簡單的for-in
循環並直接檢查屬性值。
var obj = {
"1": {
"name":'alex',
"yes":'1'
},
"2": {
"name":'andy',
"yes":'0'
}
};
var results = {};
for (var key in obj) {
if (obj.hasOwnProperty(key) && obj[key].yes === "1"){
results[key] = obj[key];
}
}
console.log(results); // {"1": { "name": "alex", "yes": "1" }}
@Андрей_-_奇怪,我只是複製粘貼到控制檯,它似乎工作正常。你的輸出是什麼? –
我從文件和JSON中獲取對象。解析它 –
@Андрей_-_然後唯一的變化是不是將'obj'綁定到對象字面值,而是將它綁定到'JSON.parse'的返回值。類似於'var obj = JSON.parse(json_str);'。如果你分享你的輸出,錯誤和所有內容,它通常會有幫助。 –
如果你想香草javascript,下面也應該在node.js
上工作。
var testObj = {
"1": {
"name":'alex',
"yes":'1'
},
"2": {
"name":'andy',
"yes":'0'
},
"3": {
"name": 'bvvpp',
"yes": '1'
}
};
function covertCheckFunc(checker) {
return function convertChecker(target) {
var key;
for (key in checker) {
if (!target.hasOwnProperty(key)) {
continue;
}
// Single level
if (typeof target[key] === 'undefined' ||
target[key] !== checker[key]) {
return false;
}
}
return true;
}
}
// Get the first matched item. Return `null` if none match.
function getFirstMatch(checkObj, checker) {
// Convert a object to match to a match function.
if (Object.prototype.toString.call(checker) !== '[object Function]') {
checker = covertCheckFunc(checker);
}
var key;
for (key in checkObj) {
if (checkObj.hasOwnProperty(key) &&
checker(checkObj[key])) {
return checkObj[key];
}
}
return null;
}
// Get array of matched item. Return empty array if none match.
function getArrayMatch(checkObj, checker) {
if (Object.prototype.toString.call(checker) !== '[object Function]') {
checker = covertCheckFunc(checker);
}
var keys = Object.keys(checkObj);
var arrayForm = keys.map(function(key) {
return checkObj[key];
});
return arrayForm.filter(checker);;
}
console.log(getFirstMatch(testObj, {"yes": '1'}));
console.log(getArrayMatch(testObj, {"yes": '1'}));
如果你接受一些庫像Underscore或lodash,它可以更簡單:
var testObj = {
"1": {
"name":'alex',
"yes":'1'
},
"2": {
"name":'andy',
"yes":'0'
},
"3": {
"name": 'bvvpp',
"yes": '1'
}
};
var condition = {
"yes": '1'
};
var firstMatch = _.findWhere(testObj, condition);
var arrayMatch = _.filter(testObj, function(item) {
return _.isMatch(item, condition);
});
console.log(firstMatch);
console.log(arrayMatch);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
另一個問題,你對結果有什麼期待?你想得到第一個符合條件的條件,或者你想要一個匹配條件的對象數組? – fuyushimoya
@fuyushimoya我想找到所有與yes = 1的對象,然後使用它的「名稱」,「是」和其他數據以及 –
@fuyushimoya返回一個數組與兩個項目。將感謝這兩個變種 –