2015-04-09 6 views
0

http://jsfiddle.net/ow9g9y0d/Missing цикл объекта через объект JSon

var item = { 
     "slots": [{ 
      "id": "3", 
       "name": "a" 
     }, { 
      "id": "1", 
       "name": "b" 
     }, { 
      "id": "2", 
       "name": "b" 
     }] 
}; 
var data = {}; 

item.slots.forEach(function(i){ 
    if(i["name"] == "b"){ 
    data["b"] = i; 
    }else{ 
    data["a"] = i; 
    } 
}); 

console.log(data); 

Я 2 пунктов, что имя не равна Ь, но они появляются только один раз под «а», что произошло прямо там?

+2

Ваше первое значение "b" перезаписывается вторым. Что тебе необходимо сделать ? –

+0

Нет, у вас есть ** один ** элемент, имя которого не равно «b». – Pointy

+0

'data [i [" name "]] = i;' –

ответ

0

Вы можете сделать что-то вроде этого

var item = { 
 
    "slots": [{ 
 
    "id": "3", 
 
    "name": "a" 
 
    }, { 
 
    "id": "1", 
 
    "name": "b" 
 
    }, { 
 
    "id": "2", 
 
    "name": "b" 
 
    }, { 
 
    "id": "4", 
 
    "name": "b" 
 
    }] 
 
}; 
 
var data = {}; 
 
var ctr = 0; 
 
item.slots.forEach(function(i) { 
 
    if (i.name == "b") { 
 
    (!(data.b == undefined)) ? ctr++ : data.b = {}; 
 
    data.b["" + ctr] = i; 
 
    } else { 
 
    data.a = i; 
 
    } 
 
}); 
 

 
console.log(data); 
 
document.body.innerHTML = JSON.stringify(data.b);

1

Попробуйте

var item = { 
     "slots": [{ 
      "id": "3", 
       "name": "a" 
     }, { 
      "id": "1", 
       "name": "b" 
     }, { 
      "id": "2", 
       "name": "b" 
     }] 
}; 
var data = {}, temp; 

item.slots.forEach(function(i){ 

    var temp = data[i["name"]]; 

    if (temp) { 
     if (!(temp instanceof Array)) { 
      data[i["name"]] = [temp]; 
     } 
     data[i["name"]].push(i); 
    } else { 
     data[i["name"]] = i; 
    } 

}); 

console.log(data); 
+0

Убедитесь, что вы добавили контрольный массив else, который будет воссоздан –

+0

некоторая ценность? где это? –

+0

может ли массив быть объектом вместо этого в конце? –

0

Попробуйте

http://jsfiddle.net/RamVanamali/4611adk0/

var item = { 
    "slots": [{ 
     "id": "3", 
      "name": "a" 
    }, { 
     "id": "1", 
      "name": "b" 
    }, { 
     "id": "2", 
      "name": "b" 
    }] 
}; 
var arr = []; 
item.slots.forEach(function (i) { 
    var data = {}; 
    if (i["name"] == "b") { 
     data["b"] = i; 
    } else { 
     data["a"] = i; 
    } 

    arr.push(data); 
}); 
document.body.innerHTML = JSON.stringify(arr); 

Результат: [{ "а": { "ID": "3", "название": "а"}}, { "Ъ": { "ID": "1" , "name": "b"}}, {"b": {"id": "2", "name": "b"}}]

Смежные вопросы