如何提取在 Javascript 中只有多个值的数组数据?
how to extract array data only having multiple value in Javascript?
我有这个数组数据。
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
根据值是否为数组(使用 Array.isArray()
)并检查其 length
:
Object.values
数组
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']}
作为结果值,你需要使用你找到的数组值来构建一个新对象。
可以这样做,通过循环原始 arr
的 keys
,根据您找到的 arrayValues
检查每个值,并创建一个新的键值找到匹配项时在 result
对象中配对
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);
不过,还有很多更优雅的方法可以做到这一点。
在得到很好的回答后,我为此制作了 GoogleAppsScript 版本。
有时我使用 GAS,但 GAS 不能使用像 "Object.values" 这样的方法。
(但它可以在 GAS 中使用 HTML)
希望对某人有所帮助。
var arr = {
key1: 'progress',
key2: 'done',
key3: ['new', '12'],
key4: ['checking', '10']
};
var keys = Object.keys(arr)
var values = keys.map(function(x) {
return arr[x];
});
var result = values.filter(function (v) {
return Array.isArray(v) && v.length > 1;
});
Logger.log(result);
//[[new, 12], [checking, 10]]
您可以使用 JavaScript Filter method or JavaScript Map method。
在 filter 或 map 方法的条件内检查返回数据的长度和类型。
例如:
var YourArray = {
key1: 'progress',
key2: 'done',
key3: ['new', '12'],
key4: ['checking', '10']
};
// Now filter the array
let FilteredData = Object.values(YourArray).filter(val =>{
//check if the current value is array (type) & length is > 1
if(Array.isArray(val) && val.length > 1)
{
return val;
}
});
console.log(FilteredData);
//Output: [ ["new", "12"],["checking", "10"] ]
// You can check this code in dev tool of browsers.
我有这个数组数据。
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
根据值是否为数组(使用 Array.isArray()
)并检查其 length
:
Object.values
数组
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']}
作为结果值,你需要使用你找到的数组值来构建一个新对象。
可以这样做,通过循环原始 arr
的 keys
,根据您找到的 arrayValues
检查每个值,并创建一个新的键值找到匹配项时在 result
对象中配对
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);
不过,还有很多更优雅的方法可以做到这一点。
在得到很好的回答后,我为此制作了 GoogleAppsScript 版本。 有时我使用 GAS,但 GAS 不能使用像 "Object.values" 这样的方法。 (但它可以在 GAS 中使用 HTML) 希望对某人有所帮助。
var arr = {
key1: 'progress',
key2: 'done',
key3: ['new', '12'],
key4: ['checking', '10']
};
var keys = Object.keys(arr)
var values = keys.map(function(x) {
return arr[x];
});
var result = values.filter(function (v) {
return Array.isArray(v) && v.length > 1;
});
Logger.log(result);
//[[new, 12], [checking, 10]]
您可以使用 JavaScript Filter method or JavaScript Map method。 在 filter 或 map 方法的条件内检查返回数据的长度和类型。 例如:
var YourArray = {
key1: 'progress',
key2: 'done',
key3: ['new', '12'],
key4: ['checking', '10']
};
// Now filter the array
let FilteredData = Object.values(YourArray).filter(val =>{
//check if the current value is array (type) & length is > 1
if(Array.isArray(val) && val.length > 1)
{
return val;
}
});
console.log(FilteredData);
//Output: [ ["new", "12"],["checking", "10"] ]
// You can check this code in dev tool of browsers.