2015-03-19 136 views
6

嗨,我试图从JSON数组中构建2个数组。如何从jSon对象构建数组

{ 
    "2015-03-24": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "150", 
     "promo": "", 
     "status": "available" 
    }, 
    "2015-03-25": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "150", 
     "promo": "", 
     "status": "available" 
    }, 
    "2015-03-26": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "150", 
     "promo": "", 
     "status": "available" 
    }, 
    "2015-03-27": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "100", 
     "promo": "", 
     "status": "available" 
    }, 
    "2015-03-28": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "100", 
     "promo": "", 
     "status": "available" 
    }, 
    "2015-03-29": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "100", 
     "promo": "", 
     "status": "available" 
    }, 


    "2015-04-10": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "", 
     "promo": "", 
     "status": "booked" 
    }, 
    "2015-04-11": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "", 
     "promo": "", 
     "status": "booked" 
    }, 

    "2015-05-01": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "", 
     "promo": "", 
     "status": "unavailable" 
    }, 
    "2015-05-02": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "", 
     "promo": "", 
     "status": "unavailable" 
    }, 
    "2015-05-03": { 
     "bind": 0, 
     "info": "", 
     "notes": "", 
     "price": "", 
     "promo": "", 
     "status": "unavailable" 
    }, 


} 

这是JSON数组,

所以我想建立2个阵列。

1阵列,其中status=='booked' nOR status=='unavailable'和建造起来的jQuery阵列这样

var array = ['2015-03-19', '2015-03-20', '2015-03-21', '2015-03-22', '2015-03-23', '2015-03-24', '2015-03-25', '2015-03-26', '2015-04-07', '2015-04-08', '2015-04-09', '2015-04-10']; 

另一个那些元件的保持只键(在这种情况下的时间)正在建立与那些天的日期另一个阵列,其中status=='available' AND price > '100$'

var array2 = ['2015-03-25','2015-03-26','2015-04-07','2015-04-08'];

我怎样才能实现这与jQuery?

+0

可能重复的[转换数组到JSON](http://stackoverflow.com/questions/2295496/convert-array-to-json ) – arkoak 2015-03-19 12:24:11

+0

发生了什么事的答案????? – Johnny 2015-03-19 12:51:58

+0

@watcher是我还是在这之前答案? – Johnny 2015-03-19 12:56:18

回答

4

如果j是您的JSON:

var a1 = []; 
var a2 = []; 
$.each(j, function(key, ob) { 
    if(ob.price > 100 && ob.status == 'available'){ 
     a1.push(key); 
    } 
    if(ob.status == 'booked' || ob.status == 'unavailable'){ 
     a2.push(key); 
    } 
}); 
console.log(a1); 
console.log(a2); 

产量:

["2015-03-24", "2015-03-25", "2015-03-26"] 
["2015-04-10", "2015-04-11", "2015-05-01", "2015-05-02", "2015-05-03"] 
+0

thanx无关,这是我的答案看着.. – Johnny 2015-03-19 14:17:21

0

试试这个,

var array1 = []; 
var array2 = []; 
$.each(data.items, function(key, val) { 
    if((val.status == 'booked') || (val.status == 'unavailable')){ 
    array1.push(key); 
    } 
    if((val.status == 'available') && (val.price > 100)){ 
    array2.push(key); 
    } 
}) 
0
function obj_key_select(obj, func) { 
    newArr = []; 
    for(var index in obj) { 
     if (obj.hasOwnProperty(index)) { 
      if(func(obj[index])) { 
       newArr.push(index); 
      } 
     } 
    } 
    return newArr; 
} 

var dates = JSON.parse(jsonString); 

var arrOne = obj_key_select(dates, function(element){ 
    return (element.status === 'booked' || element.status === 'unavailable'); 
}); 

var arrTwo = obj_key_select(dates, function(element){ 
    return (element.status === 'available' && parseInt(element.price) > 100); 
}); 
1

你可以有一个更通用的方法,这可能是有助于适应其他你的场景,没有jQuery的依赖。数据过滤的一个小功能:

function from(data) { 
    var predicates = []; 
    var results = []; 

    function exec() { 
    for (var k in data) { 
     if (data.hasOwnProperty(k)) { 
     for (var i = 0, l = predicates.length; i < l; i++) { 
      if (predicates[i](data[k])) { 
      results[i][k] = data[k] 
      } 
     } 
     } 
    } 

    return results; 
    } 

    exec.get = function(predicate) { 
    predicates.push(predicate); 
    results.push({}); 
    return exec; 
    } 

    return exec; 
} 

给予,你现在就可以编写代码,如:

// predicates 
function isNotAvailable(item) { 
    return item.status === "unavailable" || item.status === "booked" 
} 

function isAvailableAndPriceGreater100(item) { 
    return item.status === "available" && +item.price > 100 
} 

// results 
var results = from(obj) 
       .get(isNotAvailable) 
       .get(isAvailableAndPriceGreater100) 
       (); 

哪里obj是所有数据的对象。

该命令将返回两个数组,一个用于定义每个谓词,包含所有对象 - 因为如果要访问某些属性,可能会很有用,再次过滤。如果你只想要的键,那么你可以简单地做:

var notAvailableDates = Object.keys(results[0]);