搜索相关的json数据

时间:2016-09-12 07:02:27

标签: javascript json

如何查找与已知数据相关的数据? (我是新手。)

例如,这是我的json:

[ 
{ "id": "1",  "log": "1","pass":  "1111" },
{ "id": 2,  "log": "2","pass":  "2222" },
{ "id": 3, "log": "3","pass":  "3333" }
]

现在我知道"log"1,我想查找与其相关的数据"pass"

我试图这样做:

POST请求附带logpass数据,我在.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。

3 个答案:

答案 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);