【问题标题】:Create a new Array from Existing array in [duplicate]从[重复]中的现有数组创建一个新数组
【发布时间】:2018-12-19 03:25:04
【问题描述】:

我有一个像这样的现有数组

"activeSubject": [
        {
            "subject_id": "Class Teacher",
            "subject_name": "Class Teacher",
            "status": "2"
        },
        {
            "subject_id": "Academic Leader (Head)",
            "subject_name": "Academic Leader (Head)",
            "status": "2"
        },
        {
            "subject_id": "15",
            "subject_name": "Physics",
            "status": "2"
        }
    ]

然后我想创建一个看起来像这样的新数组

"new_subjects": [
        {
            "value": "Class Teacher",
        },
        {
            "value": "Academic Leader (Head)",
        },
        {
            "value": "Physics",
        }
    ]

我已经用map()方法试过了

var objA = this.state.activeSubject.map(o => ({
          [o]: { value: o.subject_name}
        }))

但它没有给出正确的数组,请帮我解决这个问题

【问题讨论】:

    标签: javascript reactjs react-native


    【解决方案1】:

    你的map 语法很奇怪,我不知道你想做什么,但这应该足够了;)

    this.state = {"activeSubject": [
        {
            "subject_id": "Class Teacher",
            "subject_name": "Class Teacher",
            "status": "2"
        },
        {
            "subject_id": "Academic Leader (Head)",
            "subject_name": "Academic Leader (Head)",
            "status": "2"
        },
        {
            "subject_id": "15",
            "subject_name": "Physics",
            "status": "2"
        }
    ]};
    
    var objA = this.state.activeSubject.map(o => ({ value: o.subject_name}));
    console.log(objA);

    【讨论】:

    • 并不奇怪,只是这里不正确。 foo = { [o]: v }foo = {}; foo[o] = v 相同;它被称为“计算属性名称”。这是该语言的最新添加,非常受欢迎,但在这种情况下这样做是错误的。
    • 是的,这确实让人感觉过于复杂。
    【解决方案2】:
    var activeSubject = [
        {
            "subject_id": "Class Teacher",
            "subject_name": "Class Teacher",
            "status": "2"
        },
        {
            "subject_id": "Academic Leader (Head)",
            "subject_name": "Academic Leader (Head)",
            "status": "2"
        },
        {
            "subject_id": "15",
            "subject_name": "Physics",
            "status": "2"
        }
    ];
    let newSubject = [];
    activeSubject.forEach((obj) => { newSubject.push({ 'value:' obj.subject_name}); });
    console.log(newSubject);
    

    【讨论】:

    • 你为什么要在上面写forEach.map 为你做这件事,并为此而建
    • 对不起...我不习惯使用 .map - 主要在不支持 .map 的旧 rhino 引擎上工作
    • 我猜这是你可以做到的方式
    【解决方案3】:

    这样的事情会起作用

    this.state = {"activeSubject": [
        {
            "subject_id": "Class Teacher",
            "subject_name": "Class Teacher",
            "status": "2"
        },
        {
            "subject_id": "Academic Leader (Head)",
            "subject_name": "Academic Leader (Head)",
            "status": "2"
        },
        {
            "subject_id": "15",
            "subject_name": "Physics",
            "status": "2"
        }
    ]};
    
    let objA = this.state.activeSubject.map(({ subject_name: value}) => ({ value }));
    
    console.log(objA)

    【讨论】:

      【解决方案4】:

      您可以将destructuring assignmentobject property assignment pattern [YDKJS: ES6 & Beyond] 结合使用,并将valueshort hand property 结合使用。

      var array = [{ subject_id: "Class Teacher", subject_name: "Class Teacher", status: "2" }, { subject_id: "Academic Leader (Head)", subject_name: "Academic Leader (Head)", status: "2" }, { subject_id: "15", subject_name: "Physics", status: "2" }],
          result = array.map(({ subject_name: value }) => ({ value }));
      
      console.log(result);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        猜你喜欢
        • 2021-03-09
        • 2013-03-23
        • 2017-08-26
        • 2022-11-03
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        相关资源
        最近更新 更多