我正在尝试对从我的API返回的多维数组进行排序,以允许人们根据节拍选择范围。
说实话,我确实坚持了我的api回报。
var myObj = [{
title: 'title one',
beats: 1
}, {
title: 'title two',
beats: 2
}, {
title: 'title three',
beats: 3
}, {
title: 'title four',
beats: 4
}, {
title: 'title five',
beats: 5
}, {
title: 'title six',
beats: 6
}, {
title: 'title seven',
beats: 7
}, {
title: 'title eight',
beats: 8
}, {
title: 'title nine',
beats: 9
}, {
title: 'title ten',
beats: 10
}];
现在我正在尝试允许用户根据节拍选择一个范围。
所以如果他们选择1-4就会返回。
var myObj = [{
title: 'title one',
beats: 1
}, {
title: 'title two',
beats: 2
}, {
title: 'title three',
beats: 3
}];
和8-10会返回等等......
var myObj = [{
title: 'title eight',
beats: 8
}, {
title: 'title nine',
beats: 9
}, {
title: 'title ten',
beats: 10
}];
我会用什么功能来表达对此的任何帮助?
答案 0 :(得分:1)
@ qubyte的answer到How to get all properties values of a Javascript Object (without knowing the keys)?
告诉我们如何枚举返回的Object的所有值。
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var val = obj[key];
// use val
}
}
在您的示例中,返回的myObj中的每个值本身都是一个属性为“title”和“beats”的对象,并且您希望在整个myObj中搜索具有特定节拍的对象。
让我们首先创建一个搜索值属性的函数,然后返回一个具有所需值的数组。
function searchByProperty(obj, property, low, high){
var found = [];
var val, prop;
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
val = obj[key];
prop = val[property];
if( (prop>=low) && (prop<=high) ) found.push(val);
}
return found;
}
现在我们可以像这样使用它:
searchByProperty(myObj, 'beats', 1, 4)
将返回:
[
{
title: 'title one',
beats: 1
},
{
title: 'title two',
beats: 2
},
{
title: 'title three',
beats: 3
},
{
title: 'title four',
beats: 4
}
]
答案 1 :(得分:1)
由于你已经使myObj成为一个真正的数组,你可以做到(非常短而且非常快):
function getBeatsArray(myArray, low, high) {
return myArray.filter(function(b) {
return b.beats <= high && b.beats >=low;
});
}
答案 2 :(得分:0)
我制作了一个按我认为你想要的方式运作的功能
function getBeatsObj(allBeatsObj,rangeStart,rangeEnd) {
var returnObj = {};
for(var i = rangeStart; i <= rangeEnd; i++) {
returnObj[i - 1] = allBeatsObj[i - 1];
}
return returnObj;
}