Javascript 过滤对象

Javascript -filtering object

本文关键字:对象 过滤 Javascript      更新时间:2023-09-26

我正在尝试在纯 JS 中做一些事情。 我有一个这样的对象

var data = {
    "Something": true,
    "Something else": false,
    "Blah": false,
    "a fish ISA": true
};

我想做的是过滤任何忠实于其自己的对象的东西。 目前我正在尝试

var thingFunctions = Object.keys(data).filter(function(e) {
    return typeof data[e] == 'function'
});

但我认为这是不正确的。 如何获取值为 true 的数据到其自己的对象?

谢谢

所以首先你在data里面没有函数,所以对函数进行检查不会返回任何内容。

var data = {
    "Something": true,
    "Something else": false,
    "Blah": false,
    "a fish ISA": true
};
var thingFunctions = Object.keys( data ).filter(function( e ) {
    return data[ e ] === true;
});
console.log( thingFunctions );
// Will result in [ 'Something', 'a fish ISA' ]

你在请求一个对象。

我使用 Array.prototype.forEach() 对键进行迭代,使用空对象进行结果filtered,因为我无法过滤对象:

var data = {
        "Something": true,
        "Something else": false,
        "Blah": false,
        "a fish ISA": true
    },
    filtered = {};
Object.keys(data).forEach(function(e) {
    if (data[e] === true) {                      // explicit testing for boolean and true!
        filtered[e] = data[e];
    }
});
document.write('<pre>' + JSON.stringify(filtered, 0, 4) + '</pre>');

由于您只想拥有所有真值,因此我们可以通过执行以下操作将它们转换为真假值。

!!({}) // true
!!([]) // true
!!('') // false
!!(true) // true
!!(false) // false
...

这样,我们可以通过执行以下操作来查看任何数据类型是真还是假。

var thingFunctions = Object.keys(data).filter(function(e) {
    return !!(data[e]);
});

要获取一个新对象,而不仅仅是指向 true 值的键数组(不是真实的,例如 1"hello"):

var onlyTrues = {};
for (var prop in data) {
  if (data[prop] === true) {
    onlyTrues[prop] = data[prop];
  }
}