【问题标题】:How to assign an object /array to another object?如何将对象/数组分配给另一个对象?
【发布时间】:2021-05-01 01:36:46
【问题描述】:

我正在开发一个接收如下列表的函数:

const payload = [
    [1, 2],
    [1,2,3],
    {
        name: 'sandra',
        age: 20,
        email: 'sandra@xyz.com'
    }
]

并返回一个像这样的对象:

{
  name: 'return payload',
  response: [ 
    { arr: [1, 2] }, 
    { arr: [1, 2, 3] }, 
    { arr: {
      name: 'sandra',
      age: 20,
      email: 'sandra@xyz.com'
    }
  ]
}

这是我拥有的功能:

const returnPayload = (arr) => {
  let response = [];
    for(let i = 0; i < arr.length; i++) {
      response.push({arr: arr[i]})
    }
    return {"name": "return payload", "response": response}
}

returnPayload(payload);
console.log(returnPayload(payload))

这是它当前返回的内容:

{
  name: 'return payload',
  response: [ { arr: [Array] }, { arr: [Array] }, { arr: [Object] } ]
}

我在网上检查了几个解决方案,建议将返回的对象传递给JSON.stringify(obj),但我正在寻找一个更简洁、更易于阅读的替代方案。 JSON 方法返回:

{"name":"return payload","response":[{"arr":[1,2]},{"arr":[1,2,3]},{"arr":{"name":"sandra","age":20,"email":"sandra@xyz.com"}}]}

请原谅标题,我不知道如何描述这个问题。

【问题讨论】:

    标签: javascript arrays json object


    【解决方案1】:

    听起来你只需要映射数组并在回调中返回一个包含每个项目的对象:

    const payload = [
        [1, 2],
        [1,2,3],
        {
            name: 'sandra',
            age: 20,
            email: 'sandra@xyz.com'
        }
    ];
    
    const result = {
      name: 'return payload',
      response: payload.map(item => ({ arr: item }))
    };
    console.log(result);

    (但arr 属性不一定是数组,正如您在第 3 项中看到的那样 - 考虑一个更具信息性的属性名称,也许?)

    【讨论】:

    • 是的,这只是一个示例,而不是原始功能。我在主代码中使用了更具描述性的名称。
    • 出于某种原因,您的建议在这里运行良好,但在 vscode 或 repl 上却不行。
    • 我刚刚在 VSCode 中尝试过,它运行得很好。您遇到的具体问题是什么?
    • 嗯,这很奇怪。在 vscode 上,我仍然得到与我的问题相同的响应格式:{name: 'return payload', response: [ { arr: [Array] }, { arr: [Array] }, { arr: [Object] } ]}
    • 请参阅 stackoverflow.com/questions/10729276/…,不过如果我是你,我不会费心试图让 sconsole.log 漂亮地显示,只需 做你需要做的事用数据代替,它会工作
    【解决方案2】:

    如果“易于阅读”是指如何查看结果,则可以继续使用JSON.stringify(),但添加一个额外的间距参数。

    const payload = [
        [1, 2],
        [1,2,3],
        {
            name: 'sandra',
            age: 20,
            email: 'sandra@xyz.com'
        }
    ]
    
    const returnPayload = (arr) => {
      let response = [];
        for(let i = 0; i < arr.length; i++) {
          response.push({arr: arr[i]})
        }
        return {"name": "return payload", "response": response}
    }
    
    returnPayload(payload);
    console.log(JSON.stringify(returnPayload(payload), null, 3))

    【讨论】:

    • 是的,这可行,但我将使用更大的数组,并且返回值将比我的问题中的要多得多。我正在寻找一种使结果看起来像这样的方法:{ arr: [1, 2, 3], arr: [1,2,3,4] }。所以它是可读的
    • 如果你只想读取arr键的值,为什么不在for循环中添加console.log(JSON.stringify({arr: arr[i]}))
    • 我不只是试图读取键值,我希望在调用函数时返回它们。但我想我会选择JSON.stringify方法,因为它有效。
    猜你喜欢
    • 2012-01-06
    • 2019-12-27
    • 1970-01-01
    • 2021-05-02
    • 2020-11-10
    • 2016-06-24
    • 2021-09-23
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多