在下面的数组中,我有关键/值对的对象
var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
},
{
key: "second",
value: "Second Option"
}];
如何根据options数组中的键获取值?
例如,如果键是"选择"它应该返回null, 如果密钥是"一个"它应该返回"第一选项"。
答案 0 :(得分:3)
ES6具有数组的查找功能:
var val = options.find(function(o){ return o.key==="select" }).value;
也许可以将它包装在你自己的功能中,使其更具可重用性:
function findValue(arr, key){
return arr.find(function(o){ return o.key===key }).value;
}
var val = findValue(options,"select");
我认为这是在没有修改原始数组的情况下最正确的语法答案,但是你现在必须意识到有很多方法可以让这只猫变亮。 (我喜欢Zodiac Zubeda的回答,因为它是一个简单的for循环,如此快速和向后兼容,并且具有跳过不必要的迭代的中断。)
答案 1 :(得分:2)
您可以从数组中搜索所需的对象,然后获取该对象的值:
var value;
// Loop through the options array
for (var i = 0; i < options.length; i++) {
// If the key for this iteration's element is desired
if (options[i].key == "select") {
// Set the value to appropriately and exit the loop
value = options[i].value;
break;
}
}
此代码根据您的密钥使“value”等于您想要的值。如果要多次确定该值,可以将代码包装在函数中并返回值。您可能还想为所需的密钥添加参数,并将options[i].key == "select"
替换为"options[i].key == <parameter name>"
。
或者,您可以像这样构建对象:
var options = {
"select": null,
"one": "First Option",
"second": "Second Option"
};
使用此功能,您可以访问所需键的值,如下所示:
options[<desired key>]
因此,options["select"]
会返回null
。
答案 2 :(得分:2)
使用Array.prototype.filter(现代浏览器和IE9 +):
options.filter(function(opt) {
return opt.key === 'one';
})[0].value;
或使用ES6箭头符号的单行:
options.filter(opt => opt.key === 'one')[0].value;
可重复使用的功能,如果找不到匹配则返回null
:
function findValueByKey(opts, key) {
var match = opts.filter(function(opt) {
return opt.key === key;
});
return match[0] ? match[0].value : null;
}
JSFiddle:https://jsfiddle.net/02oawajt/3/
答案 3 :(得分:1)
你必须蛮力......
function findValueForOption(key) {
for (i = 0; i < options.length; i++) {
if (options[i].key === key) {
return options[i].value;
}
}
return null; // Or do whatever you feel is appropriate when an unspecified key is requested...
}
答案 4 :(得分:1)
Arraymap用于查找key
和value
var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
},
{
key: "second",
value: "Second Option"
}];
var run = options.map(function (item,index) {
var fullname = 'the key='+item.key+',and value='+item.value;
return fullname;
})
console.log(run);
&#13;
答案 5 :(得分:0)
使用forEach
循环浏览他的json ..
有多种方法可以做到这一点。
这是
之一var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
},
{
key: "second",
value: "Second Option"
}];
options.forEach(function(item){
console.log(item.value)
})
答案 6 :(得分:0)
您可能需要考虑重组数据。看起来你从字面上理解了键值:
如果您按照以下方式构建数据:
var options = [
{
select: null
},
{
one: 'first option'
}
];
您只需调用options.select即可检索该值。
答案 7 :(得分:0)
如果您不介意依赖,可以使用Lodash _.fromPairs
将数组转换为适当的对象:
$0 [ -v ] [ -n ] { -i IPADDRESS | -h HOSTNAME | -s HOSTSHA }
答案 8 :(得分:0)
我希望这对你有用
private double GetPackageCharge(double charge)
{
//value returning method to determine price for selected packages
double charge = 0;
if (internetCheckBox.Checked)
{
charge = INTERNET_SPEED;
}
else if (photoCheckBox.Checked)
{
charge = PHOTO
}
else if (keyboardCheckBox.Checked)
{
charge = KEYBOARD;
}
else if microsoft.CheckBox.Checked)
{
charge = MICROSOFT;
}
return charge;
}
检查代码段以获取工作示例。
function getValue(keyName) {
if(!keyName) return ''
var value = _.find(options, function(obj){
if(obj.key === keyName) {
return true
}
})
if(value === undefined) return ''
return value.value
}
var a = getValue('one')
&#13;
$(function(){
var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
},
{
key: "second",
value: "Second Option"
}];
function getValue(keyName) {
if(!keyName) return ''
var value = _.find(options, function(obj){
if(obj.key === keyName) {
return true
}
})
if(value === undefined) return ''
return value.value
}
var a = getValue('one')
console.log(a)
})
&#13;
答案 9 :(得分:0)
对于旧版/ ES3环境:
function find(arr, key) {
for (var i = 0; i < arr.length; i += 1) {
if (arr[i].key === key) {
return arr[i].value;
}
}
}
对于较新的/ ES5环境:
function find(arr, key) {
return (arr.filter(function(item) { return item.key === key})[0] || {}).value;
}
答案 10 :(得分:0)
这是一种做法。我已经改变了它的结构,就像通过程序建议的那样,然后访问新的结构。
var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
},
{
key: "second",
value: "Second Option"
}];
function changeStructure(obj){
var newObj = {};
obj.forEach(function(val, index){
newObj[val['key']] = val['value'];
});
return newObj;
}
var newStructure = changeStructure(options);
新结构:
{
one : "First Option"
second:"Second Option"
select:null
}
现在您可以使用密钥访问它:
console.log(newStructure['select']); or console.log(newStructure.select)
答案 11 :(得分:0)
var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
}, {
key: "second",
value: "Second Option"
}];
// output values of whatever you like
checkValue("select");
console.log("------------------------------");
checkValue("one");
console.log("------------------------------");
checkValue("second");
console.log("------------------------------");
function checkValue(val) {
for (var i = 0; i < options.length; i++) {
if(options[i].key == val){
console.log("VALUE IS: " + options[i].value);
}
}
}
答案 12 :(得分:-1)
您可以使用for..of
循环。
var options = [{
key: "select",
value: null
}, {
key: "one",
value: "First Option"
}, {
key: "second",
value: "Second Option"
}];
let filter = (array, prop, res = void 0) => {
for (let {key, value} of array) prop === key && (res = value); return res
}
console.log(filter(options, "select"));
console.log(filter(options, "one"));
console.log(filter(options, "second"));