如何从对象获取键和值并返回数组?

时间:2016-05-24 22:49:22

标签: javascript jquery

那么让我给你一个示例对象:

{
  example_98: value,
  example_7658: value,
  example_2764: value
  key: value,
  otherKey: otherValue
}

我想在这个对象中搜索所有example_x并返回一个类似于的数组:

[{example_98: value}, ...]

在Javascript中执行此操作的最简单方法是什么?我更喜欢纯粹的javascript,但如果能让它更容易,我可以访问jquery。

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式获取对象的所有键:

var obj = {
  example_98: value,
  example_7658: value,
  example_2764: value
  key: value,
  otherKey: otherValue
}

console.log(Object.keys(obj)); // ['example_98', 'example_7658', ...]

要获取其键匹配特定值的所有对象,可以执行以下操作:

var regEx = /example_/;

var onlyExamples = Object.keys(obj)
  .filter(function(o) {
    // only return keys that match regEx
    return o.test(regEx);
  })
  .map(function(o) {
    // return { key: value }
    return { o: obj(o) };
  });

这将返回一个对象数组,其中与正则表达式匹配的值,因此您的示例对象将返回[{example_98: value }, {example_7658: value }, {example_2764: value}]

修改

正如@andlrc指出的那样,您可以使用以下方法优化您的正则表达式,以便仅使用“示例”选择开始的那些键:var regEx = /^example_/;

答案 1 :(得分:1)

最简单的方法?一个for-in loop

var results = [];
for (var key in obj) {
  if (key.indexOf('example_') === 0) {
    var newObj = {};
    newObj[key] = obj[key];
    results.push(newObj);
  }
}

更有趣/更实用的方式:

var results = Object.keys(obj)
  .filter(function(key) {
    return key.indexOf('example_') === 0;
  })
  .map(function(key) {
    var newObj = {};
    newObj[key] = obj[key];
    return newObj;
  });

以前使用计算名称的变体(在许多环境中不可用):

var results = Object.keys(obj)
  .filter((key) => key.indexOf('example_') === 0)
  .map((key) => { [key]: obj[key] });