我有此数组数据。
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']};
我用谷歌解决了这个问题,但我无法得到答案。有办法吗?
您可以基于值是否为数组(使用filter
)并检查其Object.values
来Array.isArray()
数组Array.isArray()
:
length
要详细说明上一个答案,如果您想准确获得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
不过,有许多更优雅的方法可以做到这一点。
得到好答案后,为此我制作了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);