从数组中的所有对象获取特定键的值

时间:2014-08-24 08:41:01

标签: javascript json node.js express

我正在运行一个express.js应用程序,该应用程序有几个api将数据提供给下拉框。返回的数据格式为:

  [
    {
        key: 'blah',
        value: 'Blah Blah'
    },
    {
        key: 'foo',
        value: 'Foos'
    },
    {
        key: 'bar',
        value: 'Bars'
    },
    {
        key: 'baz',
        value: 'Bazingo'
    }
];

其中key是我的选项键,value是显示文本。这个数组的结构是固定的,我知道我总是将键和值作为数组中每个对象的字段。

当我尝试验证提交的表单(额外的服务器端验证)时,我想交叉引用为字段提供的值与" key"的所有值。在阵列中(blah,foo,bar,baz)。鉴于这将是一个经常使用的路线,我希望每次都避免迭代数组以找到允许的值。有更简单的方法吗?换句话说,我知道我可以使用:

 permittedValues = [];
 for (i = 0; i < array.length; i++){
    permittedValues[i] = array[i]["key"];
 }

但如果可能的话,我想避免这种情况。

P.S:这似乎是一个基本问题,我在网上找到的答案并没有完全回答我的问题。所以,如果已经被要求和回答,请道歉。

7 个答案:

答案 0 :(得分:24)

你可以map

permittedValues = array.map(function(value) {
  return value.key;
});

在ES6 / ES2015中,arrow functions更加漂亮:

permittedValues = array.map(value => value.key);

它可能更漂亮,但它可能不会比for()循环更快。

答案 1 :(得分:5)

使用lodash,

  

由于lodash 4.x已删除_.pluck函数以支持map函数。

所以你可以通过以下方式完成所需的任务:

import _ from 'lodash'
_.map(items, 'key');

参考:What happened to Lodash _.pluck?

答案 2 :(得分:1)

如果您使用的是ES6 javascript版本,则可以执行以下操作:

const arrayData = [
    {
        key: 'blah',
        value: 'Blah Blah'
    },
    {
        key: 'foo',
        value: 'Foos'
    },
    {
        key: 'bar',
        value: 'Bars'
    },
    {
        key: 'baz',
        value: 'Bazingo'
    }
];
const foodBar = arrayData.find(item => item.key === "baz");
const resultValue = foodBar['value']; // here the extracted value is by key

答案 3 :(得分:0)

在当前版本的Javascript中,您需要循环执行它。

但是你可以使用像npm`lodash'这样的模块使它看起来更简单

var _ = require('lodash')
var permittedValues = _.pluck(array, 'key')

link to pluck documentation

答案 4 :(得分:0)

您可以通过地图提取值,并将它们组合成正则表达式以匹配值。

示例:http://repl.it/X0V

var items=
[
    {
        key: 'blah',
        value: 'Blah Blah'
    },
    {
        key: 'foo',
        value: 'Foos'
    },
    {
        key: 'bar',
        value: 'Bars'
    },
    {
        key: 'baz',
        value: 'Bazingo'
    }
];

var toReg = items.map(function(obj){
    return obj.key; 
}).join('|');
var regex = new RegExp('^('+ toReg +')$');

//To test the regex
var itemsToTest = ['blah', 'Pies', 'foo', 'Bazingo'];
itemsToTest.forEach(function(key){
   if(regex.test(key)){
       console.log(key);
   }
});

答案 5 :(得分:0)

尝试一下。

const myArray = [
    {
        key: 'blah',
        value: 'Blah Blah'
    },
    {
        key: 'foo',
        value: 'Foos'
    },
    {
        key: 'bar',
        value: 'Bars'
    },
    {
        key: 'baz',
        value: 'Bazingo'
    }
];
const resObject = myArray.find(item => item.key === "foo");
// Here you can access object which you want
console.log(resObject);

也可以参考此答案。

Find object by id in an array of JavaScript objects

答案 6 :(得分:0)

纯Javascript ES6

array.map(value => value.key);

下划线/ Lodash

_.map(value,'key')