简体   繁体   English

如何将数组转换为 object

[英]how to transform an array to object

I'm trying to filter an array of objects of people into a new object with its property names arranged by age each in a separate array.我正在尝试将一组人的对象过滤到一个新的 object 中,其属性名称按年龄排列,每个都在一个单独的数组中。

Example 1示例 1

Input:输入:

groupAdultsByAgeRange([{name: "Henry", age: 9}, {name: "John", age: 20}])

Result:结果:

{ '20 and younger': [ { name: 'John', age: 20 } ] }

Example 2示例 2

Input:输入:

groupAdultsByAgeRange([{name: "Anna", age: 31}, {name: "John", age: 32}, {name: "Hank", age: 60}])

Result:结果:

{ 
  '31-40': [ { name: 'Anna', age: 31 }, { name: 'John', age: 32 } ],
  '51 and older': [ { name: 'Hank', age: 60 } ] 
}

If the age range is not in the input than it should not be part of the output.如果年龄范围不在输入中,则它不应该是 output 的一部分。 For example if the input does not have people with age 51 than the object should not contain property of '51 and older'.例如,如果输入中没有 51 岁以上的人,则 object 不应包含“51 岁及以上”的属性。 and if input us empty array than output should be an empty object.如果输入我们的空数组比 output 应该是一个空的 object。

Using lodash you can do something like this使用lodash你可以做这样的事情

const _ = require('lodash');

const array = [{name: "Anna", age: 31}, {name: "John", age: 32}, {name: "Hank", age: 60}];

function ageToRange(obj) {
  const age = obj.age;
  if (age <= 20) {
    return '20 and younger';
  } 
  if (age > 30 && age <= 40) {
    return '31-40'
  }
  if (age > 50) {
    return '51 and older';
  }
}

const result = _.groupBy(array, ageToRange)

console.log(result);

This is how you do with native Javascript:这就是您使用本机 Javascript 的方式:

 //example 1 let people1 = [{name: "Henry", age: 9}, {name: "John", age: 20}] let younger_and_equal_20 = [] people1.forEach(e => { if(e.age>=20){ younger_and_equal_20.push(e) } }); console.log({"20 and younger": younger_and_equal_20}) //example 2 let people2 = [{name: "Anna", age: 31}, {name: "John", age: 32}, {name: "Hank", age: 60}] let data = { "31-40": [], "51 and older": [] } people2.forEach(e => { if(e.age>30 && e.age<=40){ data["31-40"].push(e) } else if(e.age>50){ data["51 and older"].push(e) } }); console.log(data)

    let result = {}

    function groupAdultsByAgeRange(people) {
        // An array of object which represents people who are 20 or younger
        const ageGroup = people.filter(person => person.age <= 20)

        // Only add array to the object key if it's not empty
        if (ageGroup.length > 0) {
            result["20 and younger"] = ageGroup
        }

        return result;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM