【问题标题】:how to sort array in node js如何在节点js中对数组进行排序
【发布时间】:2020-06-29 12:16:21
【问题描述】:

我有以下数组结构。

{
    "a": "aa",
    "**b**": {
        "**b**": "bb",
        "c": 1
    },
    "d": "d"
},

我想像下面这样显示最终结果。

{ "a": "aa",
        "b": "bb",
        "c": 1
    "d": "dd"
},

我正在尝试使用以下代码,但它没有按预期工作。

let finalArr = [];
  for (let [key, value] of Object.entries(resObj)) {
    if (typeof value === 'object') {
      for (let [keyInternal, valueInternal] of Object.entries(value)) {
        valueInternal.map(arrValue => {
          const finalObj = {
            a: '',
            b: '', 
            c : '',       
            d : ''
          };
          finalObj.a = key;
          finalObj.b = arrValue[1].b;
          finalObj.c = arrValue[1].c;
          finalObj.d = keyInternal;
          finalArr.push(finalObj);
        });
      }
    }
  }

【问题讨论】:

  • “我有以下数组结构” - 这是一个对象而不是数组。
  • 您想展平嵌套对象吗? "d": "dd" 是错字吗?
  • 对象后面的逗号是什么意思?
  • 是的。我想展平嵌套对象。

标签: javascript arrays node.js


【解决方案1】:

我已经用下面的方法解决了。

         let finalArr = [];
          for (let [key, value] of Object.entries(resObj)) {
            if (typeof value === 'object') {
              for (let [keyInternal, valueInternal] of Object.entries(value)) {
                valueInternal.map(arrValue => {
                  const finalObj = {
                    a: '',
                    d: ''
                  };
                  finalObj.a= key;
                  finalObj.d= keyInternal;
                  var tempobj = {...finalObj,...arrValue};
                  finalArr.push(tempobj);
                });
              }
            } 
          }

【讨论】:

    【解决方案2】:

    在条目上使用forEach 并构建新对象。如果值为对象,则使用Object.assign 进行展平。

    const obj = {
      a: "aa",
      b: {
        b: "bb",
        c: 1
      },
      d: "d"
    };
    
    const flatten = obj => {
      const res = {};
      Object.entries(obj).forEach(([key, value]) => {
        if (typeof value === "object") {
          Object.assign(res, value);
        } else {
          res[key] = value;
        }
      });
      return res;
    };
    
    console.log(flatten(obj));

    【讨论】:

      【解决方案3】:

      你可以使用递归来扁平化你这样的对象

      let obj = {
        "a": "aa",
        "**b**": {
          "**b**": "bb",
          "c": 1,
        },
        "d": "d",
        "*e*": {
          "**e**": {
            "e": 2
          }
        }
      }
      
      let flatten = (obj, final = {}) => {
        Object.entries(obj).forEach(([key, value]) => {
          if (typeof value === 'object') {
            flatten(value, final)
          } else {
            final[key] = value
          }
        })
        return final
      }
      
      console.log(flatten(obj))

      【讨论】:

      • 这个函数只给了我对象中的第一个值。我在对象中有多个值。
      • @Nilesh 你这是什么意思?你能发布一个例子吗?
      • 例如我有这样的对象。 var obj = [ { "a": "aa", "b": { "b": "bb", "c": 1 }, "d" : "d" },{ "a": "aa", "b": { "b": "bb", "c": 1 }, " d": "d" },{ "a": "aa", "b": { "b": "bb", "c": 1 } , "d": "d" }] 。如果我使用上面的函数,它只返回预期格式的最后一个对象,而不是全部。
      猜你喜欢
      • 2020-04-16
      • 2021-01-19
      • 2021-02-13
      • 1970-01-01
      • 2020-06-29
      • 2016-06-02
      • 2018-09-05
      • 2011-03-05
      • 1970-01-01
      相关资源
      最近更新 更多