如何提取在 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']} 作为结果值,你需要使用你找到的数组值来构建一个新对象。

可以这样做,通过循环原始 arrkeys,根据您找到的 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.