搜索节点 js 数组以与变量 return 索引或值进行部分匹配
Search node js array for partial match with variable, return index or value
大家好我是 node 和 js 的新手 - 试图为一个小的不和谐频道制作一个小机器人,我有点碰壁,找不到解决方案。
我正在尝试存储用户输入数据并在以后调用。到目前为止,我已经将数据存储为 json 文件。
data[user_id] = value_set
var out_data = JSON.stringify(data);
fs.writeFile('users.json', out_data);
看起来像这样:
{"35978432146597841":"String.1","32146879124653147":"String.2"}
现在我想稍后根据用户的 id 调用 String.X 值。这就是我被困的地方。我认为我需要读取 json 文件并将其传输到数组。
我想我成功地把它变成了一个包含以下内容的数组:
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = []
for(var i in data){
arr.push([i, data [i]]);}
作为...
console.log(arr[1]);
显示:
['32146879124653147','String.2']
但我无法弄清楚如何通过用户 ID (user_id) 搜索该数组以找到索引然后拆分值,或者更好的方法是直接提取值。
我试图通过 user_id 找到 'String.X' 的一切都失败了。
那么,如果我只知道'32146879124653147',我需要做什么来拉'String.2'。
如有任何帮助,我们将不胜感激。谢谢。
解决方案
var fs = require("fs");
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = [];
for(var i in data){
arr.push({
User:i,
Input:data [i]
});
}
var value = arr.find(x => x.User === id);
var f_value = value.Input;
console.log(f_value);
或
const userfile = require("./users.json");
var f_value = userfile[userID];
您可以使用 find()
。在您的示例中,它将 return 第一个 key/value 匹配,如果没有匹配则为 undefined。
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
let obj = {}
for(var i in data){
obj[i]:data [i];
let value = obj.find(value => id)
//if id = '32146879124653147'
// then the 32146879124653147: 'String.2' key/value would be returned
您需要分别推送项目,然后跳过数组中的 2 个元素对其进行循环。
var fs = require("fs");
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = []
for(var i in data){
arr.push(i);
arr.push(data[i]);
}
console.log("Printing arr...");
for(var i=0; i<arr.length; i++) {
console.log("arr[" + i + "]= " + arr[i]);
}
// Check if 32146879124653147 is found
console.log("Checking 32146879124653147...");
for (var i=0; i<arr.length; i+=2) {
if (arr[i] === "32146879124653147") {
console.log("Found " + arr[i+1]);
}
}
在 Jay 的大力帮助下,这就是我想出的答案。
var fs = require("fs");
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = [];
for(var i in data){
arr.push({
User:i,
Input:data [i]
});
}
var value = arr.find(x => x.User === userID);
var f_value = value.Input;
console.log(f_value);
其他
从那以后,我找到了一种更简单的方法来完成上述操作,无需 fs,也无需创建数组。
const userfile = require("./users.json");
var f_value = userfile[userID];
大家好我是 node 和 js 的新手 - 试图为一个小的不和谐频道制作一个小机器人,我有点碰壁,找不到解决方案。
我正在尝试存储用户输入数据并在以后调用。到目前为止,我已经将数据存储为 json 文件。
data[user_id] = value_set
var out_data = JSON.stringify(data);
fs.writeFile('users.json', out_data);
看起来像这样:
{"35978432146597841":"String.1","32146879124653147":"String.2"}
现在我想稍后根据用户的 id 调用 String.X 值。这就是我被困的地方。我认为我需要读取 json 文件并将其传输到数组。
我想我成功地把它变成了一个包含以下内容的数组:
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = []
for(var i in data){
arr.push([i, data [i]]);}
作为... console.log(arr[1]);
显示: ['32146879124653147','String.2']
但我无法弄清楚如何通过用户 ID (user_id) 搜索该数组以找到索引然后拆分值,或者更好的方法是直接提取值。
我试图通过 user_id 找到 'String.X' 的一切都失败了。 那么,如果我只知道'32146879124653147',我需要做什么来拉'String.2'。
如有任何帮助,我们将不胜感激。谢谢。
解决方案
var fs = require("fs");
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = [];
for(var i in data){
arr.push({
User:i,
Input:data [i]
});
}
var value = arr.find(x => x.User === id);
var f_value = value.Input;
console.log(f_value);
或
const userfile = require("./users.json");
var f_value = userfile[userID];
您可以使用 find()
。在您的示例中,它将 return 第一个 key/value 匹配,如果没有匹配则为 undefined。
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
let obj = {}
for(var i in data){
obj[i]:data [i];
let value = obj.find(value => id)
//if id = '32146879124653147'
// then the 32146879124653147: 'String.2' key/value would be returned
您需要分别推送项目,然后跳过数组中的 2 个元素对其进行循环。
var fs = require("fs");
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = []
for(var i in data){
arr.push(i);
arr.push(data[i]);
}
console.log("Printing arr...");
for(var i=0; i<arr.length; i++) {
console.log("arr[" + i + "]= " + arr[i]);
}
// Check if 32146879124653147 is found
console.log("Checking 32146879124653147...");
for (var i=0; i<arr.length; i+=2) {
if (arr[i] === "32146879124653147") {
console.log("Found " + arr[i+1]);
}
}
在 Jay 的大力帮助下,这就是我想出的答案。
var fs = require("fs");
var in_data = fs.readFileSync('users.json');
var data = JSON.parse(in_data);
var arr = [];
for(var i in data){
arr.push({
User:i,
Input:data [i]
});
}
var value = arr.find(x => x.User === userID);
var f_value = value.Input;
console.log(f_value);
其他
从那以后,我找到了一种更简单的方法来完成上述操作,无需 fs,也无需创建数组。
const userfile = require("./users.json");
var f_value = userfile[userID];