首页 > 解决方案 > 如果迭代的键在数组中,则映射/过滤对象值

问题描述

我需要将一个 Objects 值过滤到一个新数组 && 只有在数组中找到它的键时才将该值传递给数组 // 我很确定会有办法做到这一点,我只是在努力将其应用于我当前的模型。

下面的例子是我一直在努力的工作

JSON 文件包含一个对象数组 -

我已经过滤了选定的对象并将其键存储在一个单独的数组中(减去一些我不需要的):

let labelValues = () => {
                // Filter the JSON data to remove not wanted
                // This is explicit so will need to be written to be dynamic
                // Data also is apearing out of context
                return Object.keys(data[0]).filter((e)=>{
                    if(e == 'COMPANY' || e == 'HEADQUARTERS' || e == 'TOTAL'){
                        return false
                    }
                    return true
                })
            }

这给我留下了:

let X = ["JANUARY", "FEBUARY", "APRIL", "MARCH", "FEBUARY_1", "MAY"]

我现在需要创建一个新数组 - 通过迭代一个对象并且只有在对象 KEY 在上面的数组 X 中时才将值传递给数组

对象数据结构示例:

let obj = {
APRIL: 35
COMPANY: "Walmart"
FEBUARY: 34
FEBUARY_1: 9
HEADQUARTERS: "Bentonville, AR"
JANUARY: 22.6
MARCH: 23.4
MAY: 21.1
TOTAL: 145.1
}

所需的数组将是:

[35,34,9,22.6,23.4,21.1]

在此先感谢 - 沃利

标签: javascriptarraysobject

解决方案


for循环可用于遍历对象键并添加值:

var obj = { APRIL: 35, COMPANY: "Walmart", FEBUARY: 34, FEBUARY_1: 9,
  HEADQUARTERS: "Bentonville, AR", JANUARY: 22.6, MARCH: 23.4, MAY: 21.1, TOTAL: 145.1 }

var arr = []

for (var key in obj)
  if (key !== 'COMPANY' && key !== 'HEADQUARTERS' && key !== 'TOTAL')
    arr.push(obj[key])
    
console.log( JSON.stringify( arr ) )
console.log( '[35,34,9,22.6,23.4,21.1]' )

也可以在解析期间完成:

var json = '{"APRIL":35,"COMPANY":"Walmart","FEBUARY":34,"FEBUARY_1":9,"HEADQUARTERS":"Bentonville, AR","JANUARY":22.6,"MARCH":23.4,"MAY":21.1,"TOTAL":145.1}'

var arr = []
JSON.parse(json, (k, v) => !isNaN(v) && k !== 'TOTAL' && arr.push(v))
    
console.log( JSON.stringify( arr ) )


推荐阅读