如何从具有键/值对对象的数组中获取值?

时间:2016-11-15 04:11:50

标签: javascript

在下面的数组中,我有关键/值对的对象

var options = [{
    key: "select",
    value: null
}, {
    key: "one",
    value: "First Option"
},
{
    key: "second",
    value: "Second Option"
}];

如何根据options数组中的键获取值?

例如,如果键是"选择"它应该返回null,  如果密钥是"一个"它应该返回"第一选项"。

13 个答案:

答案 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用于查找keyvalue

&#13;
&#13;
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;
&#13;
&#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)

    })

DEMO

答案 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;
}

检查代码段以获取工作示例。

&#13;
&#13;
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;
&#13;
&#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)

JS Fiddle

答案 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"));