将对象推入数组
Posted
技术标签:
【中文标题】将对象推入数组【英文标题】:push object into array 【发布时间】:2017-03-08 02:28:37 【问题描述】:我知道这很简单,但我不明白。
我有这个代码:
// My object
const nieto =
label: "Title",
value: "Ramones"
let nietos = [];
nietos.push(nieto.label);
nietos.push(nieto.value);
如果我这样做,我会得到一个简单的数组:
["Title", "Ramones"]
我需要创建以下内容:
["01":"Title", "02": "Ramones"]
如何使用push()
将对象添加到nietos
数组中?
【问题讨论】:
"02": "Ramones"
我猜?另外,在那种情况下,为什么要数组?听起来你想构造一个简单的对象
已编辑,是的,抱歉。我将使用该数组和另一个函数来创建一个 XML 文件。历史悠久。
所以数组总是只有一个元素?编号的对象?
不,会有更多对象:nietos = ["01":"Band", "02": "Ramones", "01":"Style", "02": " RockPunk", "01": "", "02": "", "03" : "Another String"] 不同长度的不同对象。
【参考方案1】:
使用解构赋值(ES6)
const obj = label: "Title", value: "Ramones" // Modify the object
let restOfArray,
array = [
'03': 'asd', '04': 'asd',
'05': 'asd', '06': 'asd'
];
let modifiedObj = '01': obj.label, '02': obj.value
[...restOfArray] = array // Unpack the objects inside the array
array = [modifiedObj , ...restOfArray] // Push the modified object to the first index
console.log(array)
如果您想将其推送到最后一个索引,只需将 ...restOfArray
更改为前面。
array = [...restOfArray, modifiedObj]
【讨论】:
【参考方案2】:当您在任何对象中拥有超过 2 个属性时,可以使用此解决方案。
const nieto =
label: "Title",
value: "Ramones"
let nietos = [];
let xyz = Object.entries(nieto)
xyz.forEach((i,j)=>
i[0] = `$(j+1).toLocaleString("en-US",
minimumIntegerDigits: 2,
useGrouping: false,
)`
)
nietos.push(Object.fromEntries(xyz))
【讨论】:
【参考方案3】:这样也可以。
// our object array
let data_array = [];
// our object
let my_object = ;
// load data into object
my_object.name = "stack";
my_object.age = 20;
my_object.hair_color = "red";
my_object.eye_color = "green";
// push the object to Array
data_array.push(my_object);
【讨论】:
【参考方案4】:用push()
方法:
let nietos = [];
nietos.push("01": nieto.label, "02": nieto.value);
用concat()
方法:
let nietos = [];
nietos = nietos.concat("01": nieto.label, "02": nieto.value);
【讨论】:
【参考方案5】:将值保存在数组中并使用 stringify 进行转换
var nietos = [];
nietos.push("01": nieto.label, "02": nieto.value);
return nietos;
var jsonString = JSON.stringify(nietos);
【讨论】:
您好,欢迎来到 ***!根据原始问题,OP 不需要将其数组转换为字符串。你为什么在你的回答中这样做?此外,由于您的 return 被放在上面,您的 stringify 代码永远不会被执行。【参考方案6】:let nietos = [];
function nieto(aData)
let o = ;
for ( let i = 0; i < aData.length; i++ )
let key = "0" + (i + 1);
o[key] = aData[i];
nietos.push(o);
nieto( ["Band", "Ramones"] );
nieto( ["Style", "RockPunk"] );
nieto( ["", "", "", "Another String"] );
/* convert array of object into string json */
var jsonString = JSON.stringify(nietos);
document.write(jsonString);
【讨论】:
请添加一些解释。为什么您认为您提出的解决方案可能对 OP 有所帮助。 不用转成json....【参考方案7】:let nietos = [];
function nieto(aData)
let o = ;
for ( let i = 0; i < aData.length; i++ )
let key = "0" + (i + 1);
o[key] = aData[i];
nietos.push(o);
nieto( ["Band", "Ramones"] );
nieto( ["Style", "RockPunk"] );
nieto( ["", "", "", "Another String"] );
/* convert array of object into string json */
var jsonString = JSON.stringify(nietos);
document.write(jsonString);
Add an object into an array
【讨论】:
不需要转json...【参考方案8】:将对象添加到数组中
class App extends React.Component
state =
value: ""
;
items = [
id: 0,
title: "first item"
,
id: 1,
title: "second item"
,
id: 2,
title: "third item"
];
handleChange = e =>
this.setState(
value: e.target.value
);
;
handleAddItem = () =>
if (this.state.value === "") return;
const item = new Object();
item.id = this.items.length;
item.title = this.state.value;
this.items.push(item);
this.setState(
value: ""
);
console.log(this.items);
;
render()
const items = this.items.map(item => <p>item.title</p>);
return (
<>
<label>
<input
value=this.state.value
type="text"
onChange=this.handleChange
/>
<button onClick=this.handleAddItem>Add item</button>
</label>
<h1>items</h1>
</>
);
ReactDOM.render(<App />, document.getElementById("root"));
【讨论】:
@JacobPenney,我认为您并不是要作者添加问题,而是要围绕建议的解决方案添加上下文。 ;)【参考方案9】:下面的解决方案更直接。您所要做的就是定义一个简单的函数,它可以从两个给定的项目中“创建”对象。然后只需将此函数应用于两个数组,其中包含要为其创建对象并保存在 resultArray 中的元素。
var arr1 = ['01','02','03'];
var arr2 = ['item-1','item-2','item-3'];
resultArray = [];
for (var j=0; j<arr1.length; j++)
resultArray[j] = new makeArray(arr1[j], arr2[j]);
function makeArray(first,second)
this.first = first;
this.second = second;
【讨论】:
【参考方案10】:像这样创建一个对象数组:
var nietos = [];
nietos.push("01": nieto.label, "02": nieto.value);
return nietos;
首先在 push 方法中创建对象,然后返回新创建的数组。
【讨论】:
【参考方案11】:嗯,["Title", "Ramones"]
是一个字符串数组。但是["01":"Title", "02", "Ramones"]
是一个对象数组。
如果您愿意将属性或值推送到一个对象中,则需要访问该对象,然后将数据推送到该对象中。
例子:
nietos[indexNumber].yourProperty=yourValue;
在实际应用中:
nietos[0].02 = "Ramones";
如果您的对象数组已经为空,请确保它至少有一个对象,或者您要将数据推送到的那个对象。
假设我们的数组是myArray[]
,所以现在这是一个空数组,JS引擎不知道它有什么类型的数据,不是字符串,不是对象,不是数字什么的。因此,我们要将一个对象(可能是空对象)推入该数组。 myArray.push()
,或myArray.push("")
。
这会将一个空对象推入myArray
,其索引号为0
,因此您的确切对象现在是myArray[0]
然后像这样将property
和value
推入其中:
myArray[0].property = value;
//in your case:
myArray[0]["01"] = "value";
【讨论】:
我收到此错误:解析错误:第 59 行:解析文件时出现意外数字。那行是:nietos[0].02 = value; 试试nietos[0]["02"] = "Ramones";
或nietos[0][02] = "Ramones";
没有。我收到此错误“无法设置未定义的属性'0'”。代码是:var grandsons = [];孙子[0][2] = 价值;
@pmirnd 答案已更新,请查看答案的后半部分:)【参考方案12】:
您必须创建一个对象。 为对象分配值。然后将其推入数组中:
var nietos = [];
var obj = ;
obj["01"] = nieto.label;
obj["02"] = nieto.value;
nietos.push(obj);
【讨论】:
【参考方案13】:我不太确定,但你可以试试这样的:
var pack = function( arr )
var length = arr.length,
result = ,
i;
for ( i = 0; i < length; i++ )
result[ ( i < 10 ? '0' : '' ) + ( i + 1 ) ] = arr[ i ];
return result;
;
pack( [ 'one', 'two', 'three' ] ); //01: "one", 02: "two", 03: "three"
【讨论】:
以上是关于将对象推入数组的主要内容,如果未能解决你的问题,请参考以下文章