Как извлечь массив данных, имеющих только несколько значений в Javascript? - PullRequest
1 голос
/ 17 октября 2019

у меня есть данные этого массива.

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']};

Я погуглил для решения этой проблемы, но я не мог получить ответ. Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Чтобы уточнить предыдущий ответ, если вы хотите точно получить {key3:['new','12'],key4:['checking','10']} в качестве значения результата, вам нужно использовать найденные вами значения массива для построения нового объекта.

Это можно сделать следующим образомэто путем зацикливания keys исходного arr, проверки каждого значения по найденному вами 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);

Однако есть много более элегантных способов сделать это.

1 голос
/ 17 октября 2019

Вы можете filter массив Object.values, основываясь на том, является ли значение массивом (используя 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);
0 голосов
/ 17 октября 2019

после того, как я получил хороший ответ, я сделал для этого GoogleAppsScript ver. Иногда я использую 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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...