从数组中的所有对象中获取特定键的值
Posted
技术标签:
【中文标题】从数组中的所有对象中获取特定键的值【英文标题】:Getting the values for a specific key from all objects in an array 【发布时间】:2014-10-17 15:54:25 【问题描述】:我正在运行一个 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、巴兹)。鉴于这将是一个经常使用的路线,我想避免每次都遍历数组以找到允许的值。有没有更简单的方法来做到这一点?换句话说,我知道我可以使用:
permittedValues = [];
for (i = 0; i < array.length; i++)
permittedValues[i] = array[i]["key"];
但如果可能的话,我想避免这个 for 循环。
P.S:这似乎是一个基本问题,我在网上找到的答案并没有完全回答我的问题。所以,如果这个问题已经被问到并得到了回答,我们深表歉意。
【问题讨论】:
没有循环是不可能的。 你可以使用underscore pluck,但无论如何在内部它会使用一些循环。 【参考方案1】:在当前版本的 javascript 中,您需要对其进行循环。
但是你可以使用像 npm `lodash' 这样的模块来让它看起来更简单
var _ = require('lodash')
var permittedValues = _.pluck(array, 'key')
link to pluck documentation
【讨论】:
_.pluck
不再是 lodash 函数 =(【参考方案2】:
你可以map
:
permittedValues = array.map(function(value)
return value.key;
);
在 ES6/ES2015 中,arrow functions 更漂亮:
permittedValues = array.map(value => value.key);
它可能更漂亮,但它可能不会比for()
循环快。
【讨论】:
【参考方案3】:您可以通过映射提取值,并将它们形成一个正则表达式以匹配值。
示例: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);
);
【讨论】:
【参考方案4】:使用 lodash,
从 lodash 4.x 开始,_.pluck 函数已被移除以支持 map 函数。
因此您可以通过以下方式完成所需的任务:
import _ from 'lodash'
_.map(items, 'key');
参考:What happened to Lodash _.pluck?
【讨论】:
【参考方案5】:如果您使用的是 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
【讨论】:
【参考方案6】:试试这个..
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
【讨论】:
【参考方案7】:纯 JavaScript ES6
array.map(value => value.key);
下划线/Lodash
_.map(value,'key')
【讨论】:
以上是关于从数组中的所有对象中获取特定键的值的主要内容,如果未能解决你的问题,请参考以下文章