迭代具有相同名称的对象属性

时间:2016-10-19 10:11:43

标签: javascript arrays loops object for-loop

我有一个对象数组,每个对象可能包含名称相同的属性。如何迭代objects属性以提取每个条目?

我已经尝试了下面的代码,但它只给了我对象中的最后一个属性。有什么想法吗?



var clearingnumberz = [{
    "Namn": "Nordea",
    "Clearingnummer": "1100-1199",
    "Clearingnummer": "1400-2099",
    "Clearingnummer": "3000-3399",
    "Clearingnummer": "3410-4999"
  },
  {
    "Namn": "Danske Bank",
    "Clearingnummer": "1200-1399",
    "Clearingnummer": "9180-9189"
  },
  {
    "Namn": "Handelsbanken",
    "Clearingnummer": "6000-6999"
  },
  {
    "Namn": "JP Nordiska",
    "Clearingnummer": "2300-2309"
  }
];


function SearchForBankName() {

  var userInput = document.getElementById("bankTxt").value;

  for (var bank in clearingnumberz) {

    var currentObject = clearingnumberz[bank];

    if (userInput === currentObject.Namn) {

      for (var clearingnumber in currentObject) {
        console.log(currentObject.Clearingnummer);
      }
    }
  }
}

<input id='bankTxt' placeholder="search a value in Bank" value="Handelsbanken">
<input type="button" onclick="SearchForBankName()" value="search">
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

不,你没有。 JavaScript对象可能没有同名的属性。所以你的对象实际上并不像那样。

const obj = {
  "Namn": "Nordea",
  "Clearingnummer": "1100-1199",
  "Clearingnummer": "1400-2099",
  "Clearingnummer": "3000-3399",
  "Clearingnummer": "3410-4999"
}

console.log(obj); // oops

简而言之,你无法做你想做的事。您必须更改数据建模方式。

答案 1 :(得分:0)

为了加快访问速度,您可以将数据(使用数组)转换为哈希表,并使用数字作为密钥获取名称。

var clearingnumberz = [{ namn: "Nordea", clearingnummer: ["1100-1199", "1400-2099", "3000-3399", "3410-4999"] }, { namn: "Danske Bank", clearingnummer: ["1200-1399", "9180-9189"] }, { namn: "Handelsbanken", clearingnummer: ["6000-6999"] }, { namn: "JP Nordiska", clearingnummer: ["2300-2309"] }],
    numberz = Object.create(null);

clearingnumberz.forEach(function (bank) {
    bank.clearingnummer.forEach(function (clearingnumber) {
        numberz[clearingnumber] = bank.namn;
    });
});

console.log(numberz['6000-6999']);
console.log(numberz);