javascript - 如果迭代的键在数组中,则映射/过滤对象值
问题描述
我需要将一个 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]
在此先感谢 - 沃利
解决方案
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 ) )
推荐阅读
- java - 在保留所有信息的情况下隐藏和显示其他类的 javafx 阶段
- video - 用于在移动设备上自动播放 YouTube 视频的完整、精确的代码?
- csv - 使用 Azure 数据工厂从 blob 存储中仅读取一个文件并加载到数据库中
- postgresql - 在 postgresql 中声明时间戳 sa 数据类型时出现以下错误
- ruby - Ruby CSV - 检索每行解析的原始原始行?
- python - 通过python中的某些特定模式将列表分解为嵌套列表
- python - 从一个源计算多个 dask.dataframe.from_delayed()
- r - 在 R 4.0.0 中安装 Bioconductor 包
- r - 根据 R 中的唯一列值创建 data.frame?
- python - 'ApplyResult' 对象在 for 循环中不可迭代