【问题标题】:add objects to array [duplicate]将对象添加到数组[重复]
【发布时间】:2022-01-05 16:10:42
【问题描述】:

我想在没有方括号的现有数组中添加单词 使用我的代码,我得到以下输出: [["1","2","3"],["4","5","6"]]

但我希望将其添加到同一个括号中,如下所示:
["1", "2", "3","4","5","6"]

这是我的代码:

const fs = require('fs');
var data = fs.readFileSync('data.json');
var myObject = JSON.parse(data);
console.log(myObject);
var newData = [
  '4',
  '5',
  '6'
];

myObject.push(newData);
var newData1 = JSON.stringify(myObject);
console.log(newData1);

fs.writeFile('data.json', newData1, err => {
  if (err) throw err;
  else console.log("New data added");
}); 

【问题讨论】:

  • 使用展开语法?还是对象赋值?
  • 你可以用myObject.push(newData)代替myObject.push(...newData)。或myObject = myObject.concat(newData)
  • 像这样使用push是不可读的,如果你在旧的js沙箱中,你应该更喜欢.concat,否则在最近的javascript版本中使用spread operator,请参阅下面的答案
  • @OUD 我认为这不是一个好的答案,因为它不会使代码易于阅读,因为它对大多数 JavaScript 开发人员来说并不自然。如果你不介意,那就去吧。否则他只是添加了.concat 这是更可接受的答案

标签: javascript json push write


【解决方案1】:

你想使用.concat 来连接你的数组。

Array.prototype.push 只会将一个条目添加到您的数组中,您可以使用 Array.prototype.concatspread array operator ...[] 将数组中的内容传播到另一个数组中,例如:

const { readFileSync, writeFileSync } = require('fs');

async function process() {
  try {
    const dataAsString = readFileSync('data.json', 'utf8');
    const initialData = JSON.parse(dataAsString);
    console.log('initialData', initialData);
    const initialData = [
      '4',
      '5',
      '6'
    ];

    const finalData = JSON.stringify([...myObject, ...initialData));
    console.log('finalData', finalData);
    writeFileSync('data.json', finalData, 'utf8'); 
  } catch (error) {
    console.error(error);
    // handle error management here
  }
}


process()

我已添加:

  • writeFileSync因为你使用的是同步方式来读取,我猜你这里不需要异步。

  • 读取并保存到文件时将encoding 字符集设置为utf8

  • async/await 这样您就可以维护同步代码,为此我必须创建一个 async function() {} 而不是将所有内容都写入文件的全局范围内。

【讨论】:

  • 很好的答案,但是这个问题已经被问过了
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 2014-04-21
  • 2014-06-04
  • 1970-01-01
  • 2014-03-17
  • 2018-08-01
  • 2019-03-12
相关资源
最近更新 更多