如何从对象中选择某些属性

how to select the certain properties from object?

本文关键字:属性 选择 对象      更新时间:2024-04-22

请帮助解决问题。

我有以下对象:

  defaults = {
    title: undefined,
    yMax: undefined,
    yMin: undefined,
    yPeriod: undefined,
    xMax: undefined,
    xMin: undefined,
    xPeriod: undefined,
    dots: {}
  }

我需要得到一个类型为"not object"的属性数组。

即,我需要跟随:

[title, yMax, yMin, yPeriod, xMax, xMin, xPeriod]

您可以使用typeof 检查每个属性的类型

var defaults = {
   title: undefined,
   yMax: undefined,
   yMin: undefined,
   yPeriod: undefined,
   xMax: undefined,
   xMin: undefined,
   xPeriod: undefined,
   dots: {}
 }
 var a = [];
 for (prop in defaults) {
   if (typeof defaults[prop] != 'object') a.push(prop);
 }
 console.log(a);

ES6中只有一行带有Object.keys()Array#filter():

var defaults = { title: undefined, yMax: undefined, yMin: undefined, yPeriod: undefined, xMax: undefined, xMin: undefined, xPeriod: undefined, dots: {} },
    keys = Object.keys(defaults).filter(a => typeof defaults[a] !== 'object');
document.write('<pre>' + JSON.stringify(keys, 0, 4) + '</pre>');

或者ES5是一条单线,也是

var defaults = { title: undefined, yMax: undefined, yMin: undefined, yPeriod: undefined, xMax: undefined, xMin: undefined, xPeriod: undefined, dots: {} },
    keys = Object.keys(defaults).filter(function (a) { return typeof defaults[a] !== 'object'; });
document.write('<pre>' + JSON.stringify(keys, 0, 4) + '</pre>');

如果您想以全功能的方式实现这一点,可以将Object.keysArray.prototype.filterArray.prototype.map组合起来。

var arr = Object.keys(defaults).filter(function(key) {
  return typeof defaults[key] !== 'object';
}).map(function(key) {
  return defaults[key];
});

或者用ES6:写同样的东西

let arr = Object.keys(default)
  .filter(key => typeof defaults[key] !== 'object')
  .map(key => defaults[key]);

这将获得默认情况下不是对象的所有值(这意味着数组也将被排除在外)。如果您只需要钥匙,只需删除map功能即可。