【问题标题】:Using Javascript (no jquery) to append data from 2 json strings - append is not a function使用 Javascript(无 jquery)从 2 个 json 字符串追加数据 - 追加不是函数
【发布时间】:2019-12-01 04:00:08
【问题描述】:

我有我字符串化的表单数据,看起来像这样

{"name":"jack miller", "address":"123 main st"} 

我想追加更多记录,但我得到“追加不是函数”

目标是拥有这个 {"name":"jack miller", "address":"123 main st"}, {"name":"new guy", "address":"new address"}

const s = this hold master data
const data = new FormData(e.target);
let m = JSON.stringify(Object.fromEntries(data));

let c = s.concat(m)  // concat doesn't include a comma 
let d = s.append(m)  // append throw error of  append is not a function

因此,虽然我倾向于使用 json 字符串,但我可以转换为对象或数组,然后再转换为更好或更容易附加等。

为什么不追加工作?

更新:有formdata https://jsfiddle.net/fx6ebaj5的jsfiddle

那个“m”是我需要添加数据的地方。

【问题讨论】:

  • s的数据类型是什么? JS 中的数组使用.push,而不是.append,如果有帮助的话。
  • s 的类型对于我们来说很重要,它可以告诉我们为什么它不起作用,所以你可以做一个typeof(s) 并在答案中更新

标签: javascript html json reactjs forms


【解决方案1】:

如何将对象添加到数组中

let arr = [{"name":"jack miller", "address":"123 main st"} 
];

不修改实际数组

let obj = {"name":"John", "address":"432 main st"} 
let newArr = [...arr, obj];
console.log(newArr);

let appendArr=arr.concat(obj)
console.log(appendArr);

修改后的实际数组

arr.push(obj)
console.log(arr)

【讨论】:

  • 我评论了问题并添加了这个 jsfiddle m 是表单数据并推送它不喜欢 jsfiddle.net/fx6ebaj5
【解决方案2】:

在 Javascript 中有两种复制对象的方法。一种是浅拷贝,另一种是深拷贝。复制对象的最佳方法是深复制 功能,因为它不会影响对复制的所做的更改。

JSON.stringify turns an object into a string. JSON.parse turns a string into an object.

结合它们可以将一个对象变成一个字符串,然后逆向创建一个全新的数据结构。

nestedObject = [
 {"name":"jack miller", "address":"123 main st"},
 {"name":"jon", "address":"13 main st"}];

numbersCopy = JSON.parse(
JSON.stringify(nestedNumbers)
);

numbersCopy.push({"name":"Shawn", "address":"13 main st"});
console.log(nestedObject, numbersCopy);

[
 {"name":"jack miller", "address":"123 main st"},
 {"name":"jon", "address":"13 main st"}
];

[
 {"name":"jack miller", "address":"123 main st"},
 {"name":"jon", "address":"13 main st"},
 {"name":"Shawn", "address":"13 main st"}
];

// These two arrays are completely separate!

因此,在您的情况下,根据您的要求转换 m,我将执行以下步骤

const m = {hello: "hello", hi: "hi"}
let mArray = []

for (let [key, value] of Object.entries(m)) {
  let obj = {}
  obj.key = value
  mArray.push(obj)
}

mArray.push({"name":"Shawn", "address":"13 main st"})

所以我将您的 m 对象转换为数组。它现在应该可以工作了。

【讨论】:

  • 这是我的问题,我没有使用 jquery,但在这里我有一个 formdata 表单提交示例,说明我正在尝试做的事情。这个 jsfiddle 用于推送您的数据,但不适用于我的 jsfiddle.net/fx6ebaj5
  • 请注意,let m 是我要对 formdata 执行的操作,因此 m.push 表示它不是函数。你的其他东西适用于 arr / obj ...我需要能够使用 formdata
  • m.push 不起作用,因为 m 是一个对象,而 push 方法仅在 array 上可用。所以在你的情况下,你需要使用。 Object.entries() 将对象转换为数组。
  • 我已根据您的需要更新了答案,请检查。
猜你喜欢
  • 2016-11-14
  • 1970-01-01
  • 2018-10-05
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 2011-09-20
  • 2017-11-07
相关资源
最近更新 更多