Javascript 如何将两个下载的数组合并到一个JSON数组中?
我对学习编码还很陌生。所以我可能会犯很多基本错误 基本上,我通过RequestPromise从两个不同的帐户下载API内容,并希望将它们合并到一个更大的阵列中。我正在努力从request-promise函数中转义本地数据,并将其与第二个数组相结合 以下是我目前得到的信息:Javascript 如何将两个下载的数组合并到一个JSON数组中?,javascript,arrays,node.js,json,request-promise,Javascript,Arrays,Node.js,Json,Request Promise,我对学习编码还很陌生。所以我可能会犯很多基本错误 基本上,我通过RequestPromise从两个不同的帐户下载API内容,并希望将它们合并到一个更大的阵列中。我正在努力从request-promise函数中转义本地数据,并将其与第二个数组相结合 以下是我目前得到的信息: //request the site and do some stuff with the data rp(rpOptions) .then(function (parsedBody) { let in
//request the site and do some stuff with the data
rp(rpOptions)
.then(function (parsedBody) {
let incomingData1 = (parsedBody); //turning data into a value to change it a little
incomingData1.forEach((incomingData1) => {incomingData1.yearsRetired = 0}); //to add a new property
incomingData1 = JSON.stringify(parsedBody, ["favFood", "age", "work", "yearsRetired"], 2); //to filter only relevant properties into a JSON thing (i eventually want to save it to a txt file)
});
然后,我会对第二个帐户执行相同的操作,然后尝试从函数外部获取该数据,并将其合并到单个数组中,使其如下所示:
{
"first_account_name": {
"individual1": {
"favFood": 'fries',
"age": 23,
"work": 'astronaut'
"yearsRetired": 0
},
"individual2": {
"favFood": 'banana',
"age": 55,
"work": 'zookeeper'
"yearsRetired": 0
{
...
}
},
"second_account_name": { ... }
"individual6": {
"favFood": 'apple',
"age": 49,
"work": 'dinosaur'
"yearsRetired": 0
"individual7": {
"favFood": 'sausage',
"age": 33,
"work": 'doctor'
"yearsRetired": 0
{
...
}
如何将数据放入rp之外的变量中?我如何设置它,使它最终像一个嵌套数组
非常感谢,很抱歉让您感到困惑:p您正在寻找的是一个全局数组,它可以在每个名为right的Promise请求中将数据推送到其中。因此,首先,创建一个简单的数组并将其放置在页面顶部,或者如果您使用的是类,则只需将其插入相应的字段中即可
Let accountDetails = [];
接下来,在函数内部调用这个变量,如下所示
rp(rpOptions)
.then(function (parsedBody) {
let incomingData1 = (parsedBody);
incomingData1.forEach((incomingData1) => {incomingData1.yearsRetired = 0});
incomingData1 = JSON.stringify(parsedBody, ["favFood", "age", "work", "yearsRetired"], 2);
accountDetails.push({
"individual1" : incomingData1
})
});
您要寻找的是一个全局数组,它可以在每个名为right的Promise请求中将数据推送到其中。因此,首先,创建一个简单的数组并将其放置在页面顶部,或者如果您使用的是类,则只需将其插入相应的字段中即可
Let accountDetails = [];
接下来,在函数内部调用这个变量,如下所示
rp(rpOptions)
.then(function (parsedBody) {
let incomingData1 = (parsedBody);
incomingData1.forEach((incomingData1) => {incomingData1.yearsRetired = 0});
incomingData1 = JSON.stringify(parsedBody, ["favFood", "age", "work", "yearsRetired"], 2);
accountDetails.push({
"individual1" : incomingData1
})
});
如果您使用的是ES6
const processData = (data) => {
return data.map((item) => ({
favFood: item.favFood,
age: item.age,
work: item.work,
yearsRetired: 0
}))
}
// any value returned by then will be wrapped in promise
// and can be `await` ed
// you can also use
// const [ data1, data2 ] = await Promise.all([
// rp(requestOption1).then(data => processData(data)),
// rp(requestOption2).then(data => processData(data))
// ])
// if you want it to be executed parallely
const data1 = await rp(requestOption1).then(data => processData(data));
const data2 = await rp(requestOption2).then(data => processData(data));
const mergedData = [
...data1,
...data2
];
如果你没有异步等待
const processData = (data) => {
return data.map((item) => ({
favFood: item.favFood,
age: item.age,
work: item.work,
yearsRetired: 0
}))
}
Promise.all(
rp(requestOption1).then(data => processData(data)),
rp(requestOption2).then(data => processData(data))
).then(results => {
const mergedData = results.reduce((collection, result) => {
return collection.concat(result);
}, []);
})
注:
- 我编写了函数名
,因为我不知道正在处理什么。我建议您在函数名上更具体一些。(例如,它的作用)processData
const processData = (data) => {
return data.map((item) => ({
favFood: item.favFood,
age: item.age,
work: item.work,
yearsRetired: 0
}))
}
// any value returned by then will be wrapped in promise
// and can be `await` ed
// you can also use
// const [ data1, data2 ] = await Promise.all([
// rp(requestOption1).then(data => processData(data)),
// rp(requestOption2).then(data => processData(data))
// ])
// if you want it to be executed parallely
const data1 = await rp(requestOption1).then(data => processData(data));
const data2 = await rp(requestOption2).then(data => processData(data));
const mergedData = [
...data1,
...data2
];
如果你没有异步等待
const processData = (data) => {
return data.map((item) => ({
favFood: item.favFood,
age: item.age,
work: item.work,
yearsRetired: 0
}))
}
Promise.all(
rp(requestOption1).then(data => processData(data)),
rp(requestOption2).then(data => processData(data))
).then(results => {
const mergedData = results.reduce((collection, result) => {
return collection.concat(result);
}, []);
})
注:
- 我编写了函数名
,因为我不知道正在处理什么。我建议您在函数名上更具体一些。(例如,它的作用)processData
如何将数据放入rp之外的变量?
全局声明变量请在合并json对象的位置添加代码片段?从何处获取第一个帐户名和第二个帐户名?内部然后还是外部?如何将数据放入rp外部的变量?
声明变量全局请在合并json对象的位置添加代码段?从何处获取第一个帐户名和第二个帐户名?里面还是外面?