嘿伙计们我试图从JSON数组构建2个数组。
{
"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 :(得分: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"]
答案 1 :(得分: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]);
答案 2 :(得分: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);
}
})
答案 3 :(得分: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);
});