如何查找与已知数据相关的数据? (我是新手。)
例如,这是我的json:
[
{ "id": "1", "log": "1","pass": "1111" },
{ "id": 2, "log": "2","pass": "2222" },
{ "id": 3, "log": "3","pass": "3333" }
]
现在我知道"log"
是1
,我想查找与其相关的数据"pass"
。
我试图这样做:
POST请求附带log
和pass
数据,我在.json文件中搜索相同的log
值,如果有相同的数据,那么我搜索相关的{{ 1}}
pass
问题是当我使用
时fs.readFile("file.json", "utf8", function (err, data) {
var jsonFileArr = [];
jsonFileArr = JSON.parse(data); // Parse .json objekts
var log = loginData.log; // The 'log' data that comes with POST request
/* Search through .json file for the same data*/
var gibtLog = jsonFileArr.some(function (obj) {
return obj.log == log;
});
if (gotLog) { // If there is the same 'log'
var pass = loginData.pass; // The 'pass' data that comes with POST request
var gotPass = jsonFileArr.some(function (obj) {
// How to change this part ?
return obj.pass == pass;
});
}
else
console.log("error");
});
它搜索整个.json文件而不是仅通过一个objekt。
答案 0 :(得分:3)
你的主要问题是.some()
返回布尔,无论是否有任何元素与你的谓词匹配,而不是元素本身。
你想要.find()
(它将找到并返回与谓词匹配的第一个元素):
const myItem = myArray.find(item => item.log === "1"); // the first matching item
console.log(myItem.pass); // "1111"
请注意,.find()
可能无法找到任何内容,在这种情况下,它会返回undefined
。
答案 1 :(得分:2)
raw_input
方法返回一个布尔值,它只是告诉你数组中是否至少有一个项符合条件,它不会返回匹配的项目。请改为this link:
.some()
答案 2 :(得分:1)
使用ES6 Array#find可能是最简单的,但你也可以做(除其他事项外)
const x = [{
"id": "1",
"log": "1",
"pass": "1111"
}, {
"id": 2,
"log": "2",
"pass": "2222"
}, {
"id": 3,
"log": "3",
"pass": "3333"
}];
let myItem;
for (let item of x) {
if (item.log === '1') {
myItem = item;
break;
}
}
console.log(myItem);