从值javascript获取密钥

时间:2018-12-16 03:30:03

标签: javascript json object

我有一个我正在通过函数传递的对象。对象如下:

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);
  };

我正在遍历对象以过滤函数中01000之间的项目。在函数的最后,我想在名为filteredItems的对象中显示过滤的键和值。

我该如何实现以获得以下结果?

示例输出:

filteredItems: {
  cannon barrel: '800'
}

谢谢。

3 个答案:

答案 0 :(得分:4)

如果通过显示,是指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);

这将建立具有与原始对象相同的key =>值结构的filteredItems,并且您可以以相同的方式使用它。

答案 1 :(得分:1)

如果我正确理解了您的问题,那么您可以通过以下方法实现这一目标:

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)

答案 2 :(得分:1)

以下是使用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));