如何转换数组?

时间:2019-05-27 16:01:01

标签: javascript arrays object lodash

我需要使用“ Lodash”库将数组从一种类型重新格式化为另一种类型。

我最初有这样一个数组:

[{
    "language": {
      "displayName": {
        "en": "English"
      },
      "id": 1
    },
    "level": {
      "id": 1,
      "displayName": {
        "en": "Intermediate"
      }
    }
  }, {
    "language": {
      "displayName": {
        "en": "Russian"
      },
      "id": 2
    },
    "level": {
      "id": 1
      "displayName": {
        "en": "Fluent"
      }
    }
  }]

如何以这种格式转换数组:

[{
    "language": 1, // it is language.id
    "level": 1 // it is level.id
  }, {
    "language": 2, // it is language.id
    "level": 2 // it is level.id
}]

4 个答案:

答案 0 :(得分:0)

您可以像这样使用map

const input=[{language:{displayName:{en:"English"},id:1},level:{id:1,displayName:{en:"Intermediate"}}},{language:{displayName:{en:"Russian"},id:2},level:{id:1,displayName:{en:"Fluent"}}}];

const output = input.map(o => ({ language: o.language.id, level: o.level.id }))

console.log(output)

答案 1 :(得分:0)

您可以使用map。在地图回叫功能中,您可以访问单个对象,每个对象将具有languagelevel作为键。键id嵌套在语言和级别键中。因此,要检索id的值,您需要item.language.iditem.level.id,其中item是当前对象

let data = [{
  "language": {
    "displayName": {
      "en": "English"
    },
    "id": 1
  },
  "level": {
    "id": 1,
    "displayName": {
      "en": "Intermediate"
    }
  }
}, {
  "language": {
    "displayName": {
      "en": "Russian"
    },
    "id": 2
  },
  "level": {
    "id": 1,
    "displayName": {
      "en": "Fluent"
    }
  }
}];


let newData = data.map(function(item) {
  return {
    language: item.language.id,
    level: item.level.id
  }

});

console.log(newData)

答案 2 :(得分:0)

您可以使用Array.map(),如已显示。但是,根据需要,Lodash解决方案将结合使用_.map()_.mapValues()

const input = [{"language":{"displayName":{"en":"English"},"id":1},"level":{"id":1,"displayName":{"en":"Intermediate"}}},{"language":{"displayName":{"en":"Russian"},"id":2},"level":{"id":2,"displayName":{"en":"Fluent"}}}];

let res = _.map(input, o => _.mapValues(o, "id"));

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

答案 3 :(得分:0)

您可以使用简单的map使用嵌套解构来提取所需的属性:

const arr = [{"language":{"displayName":{"en":"English"},"id":1},"level":{"id":1,"displayName":{"en":"Intermediate"}}},{"language":{"displayName":{"en":"Russian"},"id":2},"level":{"id":1,"displayName":{"en":"Fluent"}}}];
const res = arr.map(({ language: { id: language }, level: { id: level }}) => ({ language, level }));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

以下是使用_.map_.mapValues的Lodash版本(以避免_.values中的_.map更加冗长):

const arr = [{"language":{"displayName":{"en":"English"},"id":1},"level":{"id":1,"displayName":{"en":"Intermediate"}}},{"language":{"displayName":{"en":"Russian"},"id":2},"level":{"id":1,"displayName":{"en":"Fluent"}}}];
const res = _.map(arr, e => _.mapValues(e, ({ id }) => id));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>