JSON подсчитать элементы массива и обернуть в - PullRequest
0 голосов
/ 16 марта 2011

Я только что обнаружил JSON сегодня, но у меня проблема с его правильным использованием.Я действительно не могу найти решение ...

По сути, я просто хочу подсчитать элементы моего массива (посчитать все дМ) и обернуть определенный элемент (например, дМ1).

Вот мой код, чтобы вы могли понять: http://jsfiddle.net/dRycS/9/

Ответы [ 4 ]

3 голосов
/ 16 марта 2011

В дополнение к тому, что @Pointy сказал здесь, ваш код изменен: JSFiddle Demo

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

var dMContent = {
    "dM1" : [
        {
            "name" : "EeEeEeEe",
            "link" : "http://test.com"
        },
        {
            "name" : "FfFfFfFf",
            "link" : "http://test.com"
        },
        {
            "name" : "GgGgGgGg",
            "link" : "http://test.com"
        } 
    ],
    "dM2" : [
        {
            "name" : "EeEeEeEe",
            "link" : "http://test.com"
        },
        {
            "name" : "FfFfFfFf",
            "link" : "http://test.com"
        } 
    ],
    "dM3" : [
        {
            "name" : "EeEeEeEe",
            "link" : "http://test.com"
        } 
    ] 
};

var STORAGE = JSON.stringify(dMContent);
var parsed = JSON.parse(STORAGE);


// WHAT I WANT TO DO

// Count the number of dM
console.log(Object.size(parsed));  //gives you 3

//display the content
for(var i in parsed){
    console.log('data in ' + i);
    for(var j=0; j<parsed[i].length; j++){
         console.log(parsed[i][j].name + ' ' + parsed[i][j].link);
    }
}
3 голосов
/ 16 марта 2011

То, что у вас есть, это , а не Массив; это объект. Объекты массива do имеют свойство "length", а объекты - нет.

Непонятно, что именно вы хотите; если вы хотите посчитать каждое свойство каждого объекта внутри «dMContent», вы бы написали что-то для подсчета рекурсивно. Для одного «слоя» объекта, что-то вроде этого может быть тем, что вы хотите:

function objectSize(obj) {
  var count = 0;
  for (var k in obj) {
    if (obj.hasOwnProperty(k)) ++count;
  }
  return count;
}
0 голосов
/ 07 января 2014

Попробуйте это: function objectCount (obj) {

objectcount = 0;
$.each(obj, function(index, item) {
    objectcount = objectcount + item.length;
});
return objectcount;
}

objectCount (OBJ); где obj - это объект json с массивом json в качестве подобъектов

0 голосов
/ 16 марта 2011

В вашем коде dMContent это объект, а не массив.

Чтобы посчитать элементы в объекте, сделайте это:

var i = 0;
for (x in parsed) {
    if (parsed.hasOwnProperty(x)) {
        i++;
    }
}
alert(i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...