从值中获取键的Javascript方法

3

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

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

感谢您的提前帮助。

这没有意义。你的意思是“显示值的键”吗? - Andrew Li
看起来你正在保留一个仅包含值的数组。为什么不利用filteredItems对象,并在它们通过检查时将它们附加上去呢?filteredItems[key] = items[key]; - bmartin
1
将value变成一个对象数组,代码如下:value.push({key: items[key]}); - zipzit
3个回答

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

这将使用与原始对象相同的键 => 值结构构建过滤后的项(filteredItems),您可以以相同的方式处理它。

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)


1

这是使用Object.entries和Array 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));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接