【问题标题】:Obtain Key from value javascript从值 javascript 中获取 Key
【发布时间】:2018-12-16 03:30:02
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 这没有意义。你是什​​么意思'显示值的键'?
  • 看起来您只保留了一个值数组。为什么不使用filteredItems 对象,并在它们通过您的检查时附加它们? filteredItems[key] = items[key];
  • value.push({key: items[key]}); ??将 value 设置为对象数组,而不是简单的数组。

标签: javascript json object


【解决方案1】:

如果通过显示,你的意思是 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);

这会建立与原始对象具有相同键 => 值结构的过滤项目,您可以以相同的方式使用它。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果我正确理解您的问题,那么您可以通过以下方式实现:

      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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-12
        相关资源
        最近更新 更多