下面是我的数组:
var array1 =[
{
"id": 77,
"selected" : false
},
{
"id": 76,
"selected" : true
},
{
"id": 75,
"selected" : true
},
{
"id": 74,
"selected" : false
},
{
"id": 73,
"selected" : true
}
];
var obj = { "id" : 74, "selected" : true };
for (var i = 0; i < array1.length; i++) {
}
&#13;
所以现在我想首先只获取那些选择属性为true的记录,然后按ID按降序对记录进行排序,然后从74选择属性为真的>>选择紧接的前一条记录。
例如: 75是74的选定属性为true的前一个记录。如果75的选定属性是假的,那么如果我们从74开始上升,我们应该选择76。
预期输出:
{
"id": 75,
"selected" : true
}
代码:
for (var i = 0; i < array1.length; i++) {
}
这里我没有得到如何通过id = 74过滤记录并使用true选择,然后按id降序排序记录并选择上一条记录。
答案 0 :(得分:3)
由于你需要紧接排序的74之前的记录,这里我按升序排序并立即获取记录。同样但更容易编码。
var array1 =[
{
"id": 77,
"selected" : false
},
{
"id": 76,
"selected" : true
},
{
"id": 75,
"selected" : true
},
{
"id": 74,
"selected" : false
},
{
"id": 73,
"selected" : true
}
];
var el = array1.sort(function (a,b) {
if (a.id < b.id) return -1;
return 1;
}).find(function (a) {
return a.selected && a.id > 74;
});
console.log(el);
&#13;
答案 1 :(得分:2)
const array1 = [{
"id": 77,
"selected": false
},
{
"id": 76,
"selected": true
},
{
"id": 75,
"selected": true
},
{
"id": 74,
"selected": false
},
{
"id": 73,
"selected": true
}
];
const obj = { "id" : 74, "selected" : true };
let output = {};
let index = array1.map(a=>a.id).indexOf(obj.id); //Find the index of obj
//Iterate array1 from the index to 0
//Check is selected is true
for(let i=index-1;i>=0;i--){
if(array1[i].selected){
output = array1[i];
break;
}
}
console.log(output);
&#13;
答案 2 :(得分:2)
您可以使用Array#reduce
并测试对象,如果它与过滤器匹配并获得大于或等于所需的最小id
。
var array = [{ id: 77, selected: false }, { id: 76, selected: true }, { id: 75, selected: true }, { id: 74, selected: false }, { id: 73, selected: true }],
filter = { id: 74, selected: true },
result = array.reduce(function (r, a) {
return a.selected === filter.selected && a.id > filter.id && (r && a.id < r.id || !r) ? a : r;
}, undefined);
console.log(result);
答案 3 :(得分:0)
使用此脚本。
$().ready(function () {
var array1 = [
{
"id": 77,
"selected": false
},
{
"id": 76,
"selected": true
},
{
"id": 75,
"selected": true
},
{
"id": 74,
"selected": false
},
{
"id": 73,
"selected": true
}
];
var filterData = $(array1).filter(function (i, n) { return n.selected === true });
filterData = filterData.sort(function (a, b) { return a.id - b.id });
$.each(filterData, function (i, item) {
console.log(item);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.2/jquery.min.js"></script>