如何在Javascript中仅提取具有多个值的数组数据?

问题描述 投票:1回答:3

我有此数组数据。

var arr = {key1:'progress',key2:'done',key3:['new','12'],key4:['checking','10']};

而且我想提取数组数据,但是它应该只包含多个值数据。所以我想要这样的结果数组。

var result = {['new','12'],['checking','10']};

var result = {key3:['new','12'],key4:['checking','10']};

我用谷歌解决了这个问题,但我无法得到答案。有办法吗?

javascript arrays object ecmascript-5
3个回答
1
投票

您可以基于值是否为数组(使用filter)并检查其Object.valuesArray.isArray()数组Array.isArray()

length

1
投票

要详细说明上一个答案,如果您想准确获得var arr = { key1: 'progress', key2: 'done', key3: ['new', '12'], key4: ['checking', '10'] }; var result = Object.values(arr).filter(v => Array.isArray(v) && v.length > 1); console.log(result);作为结果值,则需要使用发现的数组值来构建新对象。

可以这样做,方法是:循环搜索原始{key3:['new','12'],key4:['checking','10']}keys,对照找到的arr检查每个值,并在出现以下情况时在arrayValues对象中创建新的键值对:找到匹配项

result

不过,有许多更优雅的方法可以做到这一点。


0
投票

得到好答案后,为此我制作了GoogleAppsScript ver。有时我使用GAS,但GAS不能使用“ Object.values”之类的方法。(但可以在GAS HTML中使用)希望它对某人有帮助。

var arr = {
  key1: 'progress',
  key2: 'done',
  key3: ['new', '12'],
  key4: ['checking', '10']
};

var arrayValues = Object.values(arr).filter(v => Array.isArray(v) && v.length > 1);

let result = {}
Object.keys(arr).forEach(key => arrayValues.includes(arr[key]) ? result[key] = arr[key] : null)

console.log(result);
© www.soinside.com 2019 - 2024. All rights reserved.