检查某个键的json值的一部分是否与给定输入(javascript)相同

时间:2013-01-09 01:26:42

标签: javascript json key

我有一个非常大的Json文件(数据集大于30 000)。我需要检查某个键的某个部分值是否与给定的字符串相同,然后增加一个int。

这是Json的一部分:

[
    {
        "geo": null,
        "coordinates": null,
        "in_reply_to_status_id_str": null,
        "contributors": null,
        "in_reply_to_user_id": null,
        "in_reply_to_status_id": null,
        "truncated": false,
        "created_at": "Tue Nov 13 20:17:17 +0000 2012"

我想检查“created_at”键是否有某一天(值)。例如'Tue' 然后递增:var tuesday = 0;

我唯一想到的就是这个功能:

function getValues(obj, key) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getValues(obj[i], key));
        } else if (i == key) {
            objects.push(obj[i]);
        }
    }
    return objects;
}

但它只检查密钥并将值放入数组中。那不是我想要的。

2 个答案:

答案 0 :(得分:3)

从您的问题中不能立即清楚数据的结构是什么,但它看起来是一个对象数组,其中created_at属性将使用Date填充。如果您需要它是递归的(您提供的代码建议),则需要修改以下代码。但是要说明一下:

  

我想检查“created_at”键是否有某一天(值)。喜欢   例如'Tue'然后递增:var tuesday = 0;

然后,以下内容将数组作为data并导致变量value包含一个带有天数映射的对象和created_at属性开头的项目数一周7天的字符串。

var valMap = {
  Sun: 'sunday',
  Mon: 'monday',
  Tue: 'tuesday',
  Wed: 'wednesday',
  Thu: 'thursday',
  Fri: 'friday',
  Sat: 'saturday'
}

var value = data.reduce(function(m, i, x){
  for (d in valMap){
    if (i.created_at.indexOf(d) === 0){
      m[valMap[d]]++;
      return m;
    }
  }
  return m;
}, {
  sunday: 0,
  monday: 0,
  tuesday: 0,
  wednesday: 0,
  thursday: 0,
  friday: 0,
  saturday: 0
});

结果类似于:

{
  sunday: 0,
  monday: 1,
  tuesday: 3,
  wednesday: 0,
  thursday: 1,
  friday: 0,
  saturday: 6
}

答案 1 :(得分:0)

如果您想查看对象的字段名称中是否存在该键,请使用indexOf

 function getValues(obj, key) {
        var objects = [];
        for (var i in obj) {
            if (!obj.hasOwnProperty(i)) continue;
            if (typeof obj[i] == 'object') {
                objects = objects.concat(getValues(obj[i], key));
            } else if (s.indexOf(key) !== -1) {
                objects.push(obj[i]);
            }
        }
        return objects;
    }