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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 向对象添加元素_Javascript_Json_Object - Fatal编程技术网

Javascript 向对象添加元素

Javascript 向对象添加元素,javascript,json,object,Javascript,Json,Object,我需要填充一个json文件,现在我有如下内容: {"element":{"id":10,"quantity":1}} 我需要添加另一个“元素”。我的第一步是使用cart=json.parse将json放入对象类型,现在我需要添加新元素。 我想我必须使用cart.push来添加另一个元素,我尝试了以下方法: var element = {}; element.push({ id: id, quantity: quantity }); cart.push(element); 但是当我尝试执行el

我需要填充一个json文件,现在我有如下内容:

{"element":{"id":10,"quantity":1}}
我需要添加另一个“元素”。我的第一步是使用
cart=json.parse将json放入对象类型,现在我需要添加新元素。
我想我必须使用
cart.push来添加另一个元素,我尝试了以下方法:

var element = {};
element.push({ id: id, quantity: quantity });
cart.push(element);
但是当我尝试执行
element.push
时,出现了错误“objecthasnotmethodpush”,我认为我做了一些非常错误的事情,因为我没有告诉“element”任何地方

我该怎么做

编辑:对不起,我脑子里有很多困惑

我以为从
JSON.parse
获取数据时只能得到对象类型,但我首先得到的是放在JSON中的内容


用数组代替对象解决了我的问题,我也用了这里的很多建议,谢谢大家

您应该编写
var元素=[]

在javascript中,
{}
是一个空对象,
[]
是一个空数组。

您的元素不是数组,但是您的购物车需要是数组才能支持许多元素对象。代码示例:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);
如果希望cart是一个对象数组,其形式为
{element:{id:10,quantity:1}
,则执行:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push({element: element});
JSON.stringify()
是评论中提到的一个问题:

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 
那一排

var element = {};
元素
定义为普通对象。本机JavaScript对象没有
push()
方法。要向普通对象添加新项,请使用以下语法:

element[ yourKey ] = yourValue;
另一方面,您可以使用

var element = [];

然后,您可以使用
push()
添加元素如果购物车必须存储为对象而不是数组(尽管我建议存储为[]),您可以始终更改结构以使用ID作为键:

var element = { quantity: quantity };
cart[id] = element;
这允许您向购物车添加多个项目,如下所示:

cart["1"] = { quantity: 5};
cart["2"] = { quantity: 10};

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }
或:

试试这个:

var data = [{field:"Data",type:"date"},  {field:"Numero",type:"number"}];

var columns = {};

var index = 0;

$.each(data, function() {

    columns[index] = {
        field : this.field,
        type : this.type
    };

    index++;
});

console.log(columns);

如果有人想要创建类似的JSON,而不使用
cart
作为数组,那么下面是:

我有一个对象数组
myArr
如下:

var myArr = [{resourceType:"myRT",
            id: 1,
            value:"ha"},
            {resourceType:"myRT",
            id: 2,
            value:"he"},
            {resourceType:"myRT",
            id: 3,
            value:"Li"}];
我将尝试创建具有以下结构的JSON:

{
 "1":{"resourceType":"myRT","id":"1","value":"ha"},
 "2":{"resourceType":"myRT","id":"2","value":"he"},
 "3":{"resourceType":"myRT","id":"3","value":"Li"}
}
你可以简单地做-

var cart = {};
myArr.map(function(myObj){
                    cart[myObj.id]= myObj;
                    });

这段代码已经运行。

push是数组的一种方法,因此对于object,您可以获得最后一个元素的索引,并且您可能可以执行与push for object相同的工作,如下所示

var lastIndex = Object.keys(element)[Object.keys(element).length-1];
然后将对象添加到元素的新索引中

element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };

如果您在JS中没有设计to-do循环,例如,将其传递给PHP,以便为您执行循环

let decision = {}
decision[code+'#'+row] = event.target.value

这个概念可能会对仍在寻找解决方案的任何人有所帮助,我认为对象应该存储在一个数组中,如

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.push(element);
然后,当你想使用一个元素作为一个对象,你可以这样做

var element = cart.find(function (el) { return el.id === "id_that_we_want";});

将一个变量放在“我们想要的id”处,并将我们想要从数组中得到的元素的id给它。返回一个“elemnt”对象。当然,我们不必用我们的id来找到这个物体。我们可以使用任何其他属性进行查找。

要附加到对象,请使用
对象。分配

var ElementList={}
函数补遗(元素列表,元素){
让newList=Object.assign(ElementList,element)
返回新列表
}
console.log(元素列表)
输出:

{“元素”:{“id”:10,“数量”:1},“元素”:{“id”:11,“数量”:2}


我在读一些与这次尝试相关的东西,如果它有用的话

1.在对象内部定义推送功能

let obj={push:function push(element){ [].push.call(this,element)}};
现在可以像数组一样推送元素

obj.push(1)
obj.push({a:1})
obj.push([1,2,3])
这将产生这个对象

obj={
 0: 1
 1: {a: 1}
 2: (3) [1, 2, 3]
 length: 3
}

请注意,元素中添加了索引,还可以看到对象中添加了一个新的length属性。这对于查找对象的长度也很有用。这是因为
push()
function

的通用性,这是一个老问题,无论如何,今天的最佳实践是使用Object.defineProperty

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// throws an error in strict mode

console.log(object1.property1);
// expected output: 42

将新的键/对元素添加到原始
对象中

const obj = { a:1, b:2 }
const add = { c:3, d:4, e: ['x','y','z'] }

Object.entries(add).forEach(([key,value]) => { obj[key] = value })
obj新值:

{a: 1, b: 2, c: 3, d: 4, e: ["x", "y", "z"] }

我的建议是使用其他答案中已经提出的不同数据结构-它允许您在card.elements上进行推送,并允许扩展卡属性:

let card={
要素:[
{“id”:10,“数量”:1}
],
//其他卡片字段,比如“所有者”之类的。。。
}
卡片.元素.推送({“id”:22,“数量”:3})

控制台日志(卡片)如果其他人需要,我终于找到了添加对象或对象数组的好方法:

var myobj = {}

// These two options only work for single-valued keys, not arrays or objects
myobj["a"] = 1
myobj.b = 2

// This one works for everyting:
Object.assign(myobj, {"key": "value"});  // single-value

// Add object
Object.assign(myobj, {"subobj": 
  {
    "c": 3
  }
});

// Add array of objects
Object.assign(myobj, {"subarr": 
  [
    {
      "d": 4,
    },
    {
      "e": 5
    }
  ]
}); 

谢谢,但是我的购物车现在不是一个数组,我不能做cart.push:(我需要一个对象来使用JSON.stringify(购物车)operation@HypeZ若cart是一个对象数组,您仍然可以对其进行字符串化。再次感谢!但我的基本数据是对象类型,因为“cart=JSON.parse(jsonfile)”在开始时..我不认为我应该将json作为一个对象,将其转换为数组,添加元素,字符串化..出于某种原因,我的对象只填充了最后一个元素。例如,我有4个不同的项,但在一个对象中,所有4个元素都是=我找到的最后一个值解决方案是创建元素={};内部为,则为其工作properly@GorodeckijDimitrij如果重复使用同一个元素对象,并用新值重新填充它的键,那么您将修改同一个元素实例,一次又一次地将其推入数组。只需为要添加的每个元素使用一个新元素对象,这就是您在for循环的作用域。无法执行cart.push,因为cart现在是一个对象!:(为什么它是一个对象而不是数组?因为我是从“cart=JSON.parse(jsonfile)”获得它的,它会给出一个object谢谢,但我的cart需要是一个对象而不是数组:(使用这样的对象的一个原因是,如果您需要删除项目。从对象中删除键比从数组中删除键容易得多。如果HypeZ的数组注释让任何人感到不舒服,Craig的回答不会添加数组,则使用括号[]
const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// throws an error in strict mode

console.log(object1.property1);
// expected output: 42
const obj = { a:1, b:2 }
const add = { c:3, d:4, e: ['x','y','z'] }

Object.entries(add).forEach(([key,value]) => { obj[key] = value })
{a: 1, b: 2, c: 3, d: 4, e: ["x", "y", "z"] }
var myobj = {}

// These two options only work for single-valued keys, not arrays or objects
myobj["a"] = 1
myobj.b = 2

// This one works for everyting:
Object.assign(myobj, {"key": "value"});  // single-value

// Add object
Object.assign(myobj, {"subobj": 
  {
    "c": 3
  }
});

// Add array of objects
Object.assign(myobj, {"subarr": 
  [
    {
      "d": 4,
    },
    {
      "e": 5
    }
  ]
});