Javascript计算有多少车库有carmake1

时间:2016-10-18 11:44:31

标签: javascript object

我有一个表示为车库的数据。 我需要例如计算有carmake1

的车库数量

我试过这个:

count = obj.garages.filter(function(item) { return item === "carmake1" }).length;

但是这会返回0,我们知道数据中有实际的carmake1。

以下是数据:

obj = {
  "garages": [{
      "id": "1",
      "carId": "1",
      "tags": {
        "483": "carmake1",
        "485": "carmake3"
      }
    },
    {
      "id": "2",
      "carId": "1",
      "tags": {
        "483": "carmake1",
        "485": "carmake3"
      }
    },
    {
      "id": "3",
      "carId": "2",
      "tags": {
        "484": "carmake2",
        "485": "carmake3"
      }
    },
    {
      "id": "4",
      "carId": "2",
      "tags": {
        "483": "carmake1",
        "485": "carmake3"
      }
    },
    {
      "id": "5",
      "carId": "3",
      "tags": {
        "484": "carmake2",
        "485": "carmake3"
      }
    },
  ]
};

我怎么能得到它?

4 个答案:

答案 0 :(得分:1)

您可以通过检查财产来计算。

var obj = obj = { "garages": [{ "id": "1", "carId": "1", "tags": { "483": "carmake1", "485": "carmake3" } }, { "id": "2", "carId": "1", "tags": { "483": "carmake1", "485": "carmake3" } }, { "id": "3", "carId": "2", "tags": { "484": "carmake2", "485": "carmake3" } }, { "id": "4", "carId": "2", "tags": { "483": "carmake1", "485": "carmake3" } }, { "id": "5", "carId": "3", "tags": { "484": "carmake2", "485": "carmake3" } }, ] },
    count = obj.garages.filter(function(item) {
        return item.tags[483] === "carmake1"
    }).length;

console.log(count);

或检查tags中的所有属性。

var obj = obj = { "garages": [{ "id": "1", "carId": "1", "tags": { "483": "carmake1", "485": "carmake3" } }, { "id": "2", "carId": "1", "tags": { "483": "carmake1", "485": "carmake3" } }, { "id": "3", "carId": "2", "tags": { "484": "carmake2", "485": "carmake3" } }, { "id": "4", "carId": "2", "tags": { "483": "carmake1", "485": "carmake3" } }, { "id": "5", "carId": "3", "tags": { "484": "carmake2", "485": "carmake3" } }, ] },
    count = obj.garages.filter(function (item) {
        return Object.keys(item.tags).some(function (k) {
            return item.tags[k] === "carmake1"
        });
    }).length;

console.log(count);

答案 1 :(得分:0)

如果carmake1的标签值总是483,@ Nina的解决方案就适合。

否则也许这会有所帮助。

var obj = {
  "garages": [{
      "id": "1",
      "carId": "1",
      "tags": {
        "483": "carmake1",
        "485": "carmake3"
      }
    },
    {
      "id": "2",
      "carId": "1",
      "tags": {
        "483": "carmake1",
        "485": "carmake3"
      }
    },
    {
      "id": "3",
      "carId": "2",
      "tags": {
        "484": "carmake2",
        "485": "carmake3"
      }
    },
    {
      "id": "4",
      "carId": "2",
      "tags": {
        "483": "carmake1",
        "485": "carmake3"
      }
    },
    {
      "id": "5",
      "carId": "3",
      "tags": {
        "484": "carmake2",
        "485": "carmake3"
      }
    },
  ]
};

var found = obj.garages.filter(function(f) {
  var c = 0;
  Object.keys(f.tags).forEach(function(t) {
    if (f.tags[t] === 'carmake1') c++;
  });
  return c;
});

console.log(found.length);

答案 2 :(得分:0)

Nina有最好的答案,但对于旧浏览器而言:



console.clear();
obj = {
  'garages': [{
    'id': '1',
    'carId': '1',
    'tags': {
      '483': 'carmake1',
      '485': 'carmake3'
    }
  }, {
    'id': '2',
    'carId': '1',
    'tags': {
      '483': 'carmake1',
      '485': 'carmake3'
    }
  }, {
    'id': '3',
    'carId': '2',
    'tags': {
      '484': 'carmake2',
      '485': 'carmake3'
    }
  }, {
    'id': '4',
    'carId': '2',
    'tags': {
      '483': 'carmake1',
      '485': 'carmake3'
    }
  }, {
    'id': '5',
    'carId': '3',
    'tags': {
      '484': 'carmake2',
      '485': 'carmake3'
    }
  }, ]
};
var hascarmake1 = [];
for (var a = 0; a < obj.garages.length; a++) {
  var garage = obj.garages[a];
  for (var b in garage.tags) {
    var tag = garage.tags[b];
    if (tag == 'carmake1') {
      hascarmake1.push(garage);
      break;
    }
  }
}
console.log(hascarmake1);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这可能是?

var count = 0;
var input = '{"garages":[{"id":"1","carId":"1","tags":{"483":"carmake1","485":"carmake3"}},{"id":"2","carId":"1","tags":{"483":"carmake1","485":"carmake3"}},{"id":"3","carId":"2","tags":{"484":"carmake2","485":"carmake3"}},{"id":"4","carId":"2","tags":{"483":"carmake1","485":"carmake3"}},{"id":"5","carId":"3","tags":{"484":"carmake2","485":"carmake3"}}]}'

objInput = JSON.parse(input);

for (i in objInput.garages) {
  if (objInput.garages[i].tags[483] == "carmake1") {
    count++;
  }
}

console.log(count);

Check the Fiddle