JSON 1

[{
    "contactflag": "0",
    "City": "America",
    "District": "District I",
    "zipcode": "4311"
}, {
    "contactflag": "1",
    "City": "America",
    "District": "District II",
    "zipcode": "4330"
}]

JSON 2

[{
    "contactflag": "0",
    "City": "Japan",
    "District": "District I",
    "zipcode": "7488"
}]

for (var ii = 0; ii < address.length; ii++) {
    if (address[ii].contactflag == 1) {
        addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
    } else {
        addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
    }
}

У меня есть образец JSON и мой код выше. Я хочу вставить адрес в массив. Мой condition is to push contact address 1 if it exist otherwise push contact address 0. Но что происходит с моим кодом выше: он все равно нажимает contact address 0, даже если есть contact address 1

В примере 1:

Я получаю ["America, District I, 4311","America, District II, 4330"], когда я только хотел получить ["America, District II, 4330"]

Как этого добиться.

ОБНОВИТЬ

ДЕМО

0
guradio 24 Фев 2016 в 11:29

4 ответа

Лучший ответ

Проблема с вашим кодом заключается в том, что ваш код работает как для одного, когда значение равно 1, так и для одного для else, поэтому он подталкивает оба значения.

Решение: либо удалить часть else

for (var ii = 0; ii < address.length; ii++) {
  if (address[ii].contactflag == 1) {
    addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
  }
}

Теперь здесь он просто подтолкнет значение, когда условие истинно.

Или просто очистите массив :

var address = [{
    "contactflag": "1",
    "City": "America",
    "District": "District II",
    "zipcode": "4330"
  }, {
    "contactflag": "0",
    "City": "America",
    "District": "District I",
    "zipcode": "4311"
  }],
  addressTab = [];


for (var ii = 0; ii < address.length; ii++) {
  if (address[ii].contactflag == 1) {
    addressTab = []; // <-----make it empty here.
    addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
    break; // <-----add this to break;
  } else {
    addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
  }
}

document.querySelector('pre').innerHTML = JSON.stringify(addressTab, 0, 4);
<pre></pre>
4
Jai 24 Фев 2016 в 09:10

Думаю, вот что бы вы хотели сделать:

var address = [{
    "contactflag": "0",
    "City": "Japan",
    "District": "District I",
    "zipcode": "7488"
}];

var addressTab = [];

for (var ii = 0; ii < address.length; ii++) {
    if (address[ii].contactflag === "1") {
        addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
    }
}

if (addressTab.length == 0) {
    addressTab.push(address[0].City + ", " + address[0].District + " " + address[0].zipcode);
}
2
Adam 24 Фев 2016 в 08:37

Ниже должно работать на вас

   for (var ii = 0; ii < address.length; ii++) {
    if (address[ii].contactflag == "1") {
        addressTab = [];
        addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
    }
   else
    {
    addressTab.push(address[0].City + ", " + address[0].District + " " + address[0].zipcode);
    }
  }
2
Mir Gulam Sarwar 24 Фев 2016 в 08:47

address[ii].contactflag == 1 всегда истинно, если значение существует. используйте address[ii].contactflag == "1", так как вы сохранили 1 в виде строки.

if (address[ii].contactflag == "1") {
    addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
} else {
    addressTab.push(address[ii].City + ", " + address[ii].District + " " + address[ii].zipcode);
}
0
Sooraj 24 Фев 2016 в 08:33