将对象推入数组

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]

然后像这样将propertyvalue 推入其中:

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"

【讨论】:

以上是关于将对象推入数组的主要内容,如果未能解决你的问题,请参考以下文章

将对象推入数组

将一个对象推入数组,对象覆盖前一个

Javascript将对象推入数组

将对象推入javascript深拷贝还是浅拷贝中的数组?

将相同的多个对象推入多个数组

如何将对象推入数组?