Получить ключ от значения JavaScript - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть объект, который я передаю через функцию.Объект выглядит следующим образом:

items: {
  'cannonball': '0',
  'cannon stand': '-9000',
  'cannon barrel': '800',
  .
  .
  .
}

У меня есть функция filterItem, определенная следующим образом:

function filterItem(items) {
  // console.log(items);
  var value = [];
  filteredItems = {}
  console.log(items);
  for (var key in items) {
    if (items[key] > 0 && items[key] < 1000) {
      value.push(items[key]);
    };
  };
    console.log(value);
  };

Я прохожу объект, чтобы отфильтровать элементы, которые находятся между 0 и 1000 в функции.В конце функции я хотел бы отобразить отфильтрованный ключ и значение в объекте с именем filteredItems.

Как я могу реализовать это, чтобы получить следующий результат?

Пример вывода:

filteredItems: {
  cannon barrel: '800'
}

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Если я правильно понимаю ваш вопрос, то вы можете достичь этого с помощью следующего:

var data = {
  items: {
    "cannonball": '0',
    "cannon stand": '-9000',
    "cannon barrel": '800',
  }
}

function filterItem(items) {

  // Use Object.entries to aquire array of key/value pairs
  const filteredItems = Object.entries(items)
    .filter(([key, value]) => {
      // Filter each key/value entry by criteria 0 < value < 1000
      return parseInt(value) > 0 && parseInt(value) < 1000;
    })
    .reduce((result, [key,value]) => {
      // Use a reduction to create a hash/object with filtered key/values
      result[key] = value;      
      return result;
    }, {})

  console.log(filteredItems)
}

filterItem(data.items)
0 голосов
/ 16 декабря 2018

Вот версия с использованием Object.entries и массива reduce

var items = {
  'cannonball': '0',
  'cannon stand': '-9000',
  'cannon barrel': '800',
}

function filterItem(items) {
  return Object.entries(items).reduce((acc, [key, value]) => {
    if (value > 0 && value < 1000) {
      acc.push({ [key]: value })
    }
    return acc;
  }, []);
};

console.log(filterItem(items));
0 голосов
/ 16 декабря 2018

Если под дисплеем вы имеете в виду console.log объекта, вы можете внести незначительные изменения в свою функцию:

let items = {
    'cannonball': '0',
    'cannon stand': '-9000',
    'cannon barrel': '800'
};
    
function filterItems(items) {
  filteredItems = {}
  for (var key in items) {
    if (items[key] > 0 && items[key] < 1000) {
      filteredItems[key] = items[key];
    };
  }
    console.log(filteredItems);
};
    
filterItems(items);

Это создает фильтрованные элементы с той же структурой значения ключа =>, что и у исходного объекта, и вы можете работать с ним таким же образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...