Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将两个下载的数组合并到一个JSON数组中?_Javascript_Arrays_Node.js_Json_Request Promise - Fatal编程技术网

Javascript 如何将两个下载的数组合并到一个JSON数组中?

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

我对学习编码还很陌生。所以我可能会犯很多基本错误

基本上,我通过RequestPromise从两个不同的帐户下载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

您正在寻找的是一个全局数组,它可以在每个名为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
    ,因为我不知道正在处理什么。我建议您在函数名上更具体一些。(例如,它的作用)
如果您使用的是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
    ,因为我不知道正在处理什么。我建议您在函数名上更具体一些。(例如,它的作用)

如何将数据放入rp之外的变量?
全局声明变量请在合并json对象的位置添加代码片段?从何处获取第一个帐户名和第二个帐户名?内部然后还是外部?
如何将数据放入rp外部的变量?
声明变量全局请在合并json对象的位置添加代码段?从何处获取第一个帐户名和第二个帐户名?里面还是外面?