【问题标题】:Add an element at the end of a list of objects in JavaScript在 JavaScript 中的对象列表末尾添加一个元素
【发布时间】:2017-03-10 14:23:42
【问题描述】:

我有一个这样的列表作为输入:

{value: 1, rest: {value: 2, rest: null}}

我想向列表中添加一个元素并将其放置以便获得此输出:

{value: 1, rest: {value: 2, rest: {value 3, rest:null}}}

我设法使用以下函数在开头添加元素,但我应该如何让它在结尾添加元素?谢谢。

function prepend(elem, list){

  list = {value:elem, rest:list};
  return list;
}
console.log(prepend(3, {value: 1, rest: {value: 2, rest: null}}));

输出为:{value: 3, rest: {value: 1, rest: {value 2, rest:null}}}

【问题讨论】:

  • 这是一个对象,JS没有列表。
  • 有必要有那个对象结构吗?对象数组可能更适合您正在做的事情。
  • 我推荐了 Star_Man 的回答。代码简单而精彩。可以递归使用。

标签: javascript list


【解决方案1】:

你可以在这里使用for循环,当i是最后一个对象或rest是null添加新对象并中断循环。

var obj = {value: 1, rest: {value: 2, rest: null}}

function add(elem, list) {
  for (var i = obj; i; i = i.rest) {
    if (i.rest == null) {
      i.rest = { value: elem,rest: null}
      break;
    }
  }
}

add(3, obj)
console.log(obj)

【讨论】:

    【解决方案2】:

    试试这个。 我做了一个递归函数

    function prepend(elem, list){
       if (list.rest == null)
          list.rest = {value:elem, rest:null};
       else
         prepend(elem, list.rest);
       return list;
    }
    

    这个功能在所有情况下都可以使用。

    【讨论】:

      【解决方案3】:
      function append(list, item){
          if(list.rest == null)
          list.rest = item;
         else
          append(list.rest, item)
      }
      

      【讨论】:

        【解决方案4】:

        你可以做的是使用一个对象数组并在数组中使用append()

        【讨论】:

          【解决方案5】:

          您可以遍历 rest 对象,然后将新对象分配给最后一个对象。

          function prepend(elem, list) {
              var object = list;
              while (object.rest) {
                  object = object.rest;
              }
              object.rest  = { value: elem, rest: null };
              return list;
          }
          
          console.log(prepend(3, { value: 1, rest: { value: 2, rest: null } }));

          【讨论】:

            【解决方案6】:

            以下代码打印您想要的输出:

            'use strict';
            
            var obj = {
                value: 1,
                rest: {
                    value: 2,
                    rest: null
                }
            };
            
            function append(elem, obj) {
                var iteratedObj = obj;
                while (iteratedObj.rest !== null) {
                    iteratedObj = iteratedObj.rest;
                }
            
                iteratedObj.rest = elem;
            }
            
            var toBeAppended = {
                value: 3,
                rest: null
            };
            
            append(toBeAppended, obj);
            
            console.log(obj);

            【讨论】:

              【解决方案7】:

              然后尝试类似this

              var obj = {value: 1, rest: {value: 2, rest: null}};
              
              function addRest(val) {
                 var current = obj;
                 while(current.rest) {
                    current = current.rest;
                 }
                 current.rest = { value: val, rest: null };
              }
              
              addRest(3);
              console.log(JSON.stringify(obj));
              //{"value":1,"rest":{"value":2,"rest":{"value":3,"rest":null}}}
              

              【讨论】:

              • 因为最初的问题是对象,我在这里让它看起来更简单
              【解决方案8】:

              在您描述的特定情况下,这应该可以工作

              function prepend(elem, list){
              
                for (var el in list) {
                 el === 'rest' && list[el] === null ? list[el] = {value: elem, rest:null};
                }
              
                return list;
              }
              

              【讨论】:

                【解决方案9】:

                试试这个:

                function append(subHierarchy,hierarchy){
                  var node=hierarchy;
                  while(node.rest){
                    node=node.rest
                  }
                  node.rest=subHierarchy;
                  return hierarchy;
                }
                
                var result = append({value:4},{value:1,rest:{value:2,rest:{value:3}}});
                
                console.log(result);

                【讨论】:

                  【解决方案10】:

                  简单如下。

                  var elem = { ..... };
                  var obj = { ......... };
                  var rest = obj;
                  
                  while(rest){
                     rest = rest.rest;
                  }
                  rest = elem;
                  

                  【讨论】:

                  • 那行不通。您不妨删除除第一行和最后一行之外的所有内容。
                  猜你喜欢
                  • 1970-01-01
                  • 2020-09-11
                  • 2023-03-21
                  • 1970-01-01
                  • 2021-01-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多