javascript - 如何将两个下载的数组合并为一个 JSON 数组?
问题描述
我对学习编码很陌生。所以我可能会弄错很多基础知识。
基本上我正在通过请求承诺从两个不同的帐户下载 API 内容,并希望将它们合并到一个更大的数组中。我正在努力从 request-promise 函数中转义我的本地数据并将其与第二个数组结合起来
这是我到目前为止得到的:
//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
解决方案
如果你使用 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
,因为我不知道正在处理什么。我建议您更具体地了解函数名称。(例如它的作用)
推荐阅读
- java - 将 if-else 转换为 switch case 会引发错误 [Java]
- spring-data - 对 Oracle 的 spring-data-jdbc 支持
- php - 当我运行 react-native run-android 时出现此错误
- firebase - Firebase 自定义声明作为列表 + 安全规则
- r - 大量存储 rnorm 样本的所有值(向量),以便稍后进行 Tukey 测试
- linux - `do_new_mount_fc()`如何挂载像ext4这样的真实文件系统?
- python - 在我的逻辑回归程序中发现错误
- java - 了解一种方法如何计算一个数的幂
- php - 从服务器的响应中提取访问变量
- flutter - 有什么办法可以让我在一个页面中设置一个参数并在另一个页面中显示和使用它