将项目添加到对象中的数组

时间:2018-10-18 00:19:37

标签: javascript arrays json

我有一个名为featureSet的对象。

featureSet内有许多项,包括一个名为features的数组,其中包含另一个数组attributes

我可以在featureSet.features.attributes内执行以下操作,以在for loop内添加新数组

featureSet.features[i].attributes.NEWITEM= [NEWITEM_ARRAY];

当我使用console.log(featureSet)时,我可以看到其中的物品。

但是,当我使用var test = JSON.stringify(featureSet时,仅返回原始的featureSet

我该如何规避它,以便在我调用JSON.stringify时也有新项目出现?

先谢谢您。

3 个答案:

答案 0 :(得分:1)

我猜你正在做什么:

let arr = []
console.log(arr) // []
arr.push(1)
console.log(arr) // [1]
arr.abc = 2
console.log(arr.abc) // 2
arr.push(3)
console.log(arr) // [1, 3]
console.log(JSON.stringify(arr)) // '[1, 3]'
console.log(arr.abc) // 2

JSON.stringifySymbol.iterator的帮助下循环遍历数组道具。您的属性没有正整数索引,这就是为什么它们会被忽略的原因。在MDN上也有一个示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

要考虑的另一个示例(续以上示例):

arr[7] = 7
console.log(arr) // [1, 3, undefined, undefined, undefined, undefined, undefined, 7]
console.log(JSON.stringify(arr)) // "[1,3,null,null,null,null,null,7]"

答案 1 :(得分:1)

  

我该如何规避它,以便在我调用JSON.stringify时也有新项目出现?

您正在尝试将属性附加到数组,这将不起作用。

您只能将属性附加到对象

/* the original feature set */
const featureSet = {
	features: [
  	{feature: 'color',
    	attributes: {}}, // this is an object, not an array
    {feature: 'shape',
      attributes: []}    // this is an array as per original scenario
  ]
}

/* adding attributes to an object succeeds */
featureSet.features[0].attributes.NEWITEM = ['this', 'was', 'appended'];

/* adding attributes to an array quietly fails */
featureSet.features[1].attributes.NEWITEM = ['this', 'was', 'not', 'appended'];


const featureSetAsJSONString = JSON.stringify(featureSet)
console.log(featureSetAsJSONString) // notice that feature[0] is as expected, but [1] isn't

希望这会有所帮助。 干杯,

答案 2 :(得分:0)

尝试一下

featureSet.features[i].attributes.push({NEWITEM: [NEWITEM_ARRAY]})