【问题标题】:push object into array将对象推入数组
【发布时间】:2023-03-14 11:16:01
【问题描述】:

我知道这很简单,但我不明白。

我有这个代码:

// 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"}] 不同长度的不同对象。

标签: javascript arrays json object array-push


【解决方案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);
          

          【讨论】:

          • 您好,欢迎来到 StackOverflow!根据原始问题,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"}
                

                【讨论】:

                  猜你喜欢
                  • 2017-12-05
                  • 1970-01-01
                  • 2016-05-09
                  • 2011-02-13
                  • 2012-10-21
                  • 1970-01-01
                  • 2023-03-29
                  • 2019-03-24
                  相关资源
                  最近更新 更多