我有J Stsrutcure:
jobs = Job.where("state = ? and archive_time >= ?", 'approved', Time.now)
jobs.each {|job| job.archive }
我正在尝试编写一个将检索FIRST N元素的函数
前:
var rooms={};
rooms["room1"] = 10;
rooms["room2"] = 25;
rooms["room3"] = 15;
rooms["room4"] = 1;
rooms["room5"] = 10;
rooms["room6"] = 181;
rooms["somrthing"] = value;
如果limit = 3将返回一个Object,如:
function getElements(limit) {
..
}
(前三个要素:我不需要订购!)
答案 0 :(得分:2)
function getTopElements(limit) {
var newRooms = {};
var i = 0;
for(r in rooms) {
if(i < limit) {
newRooms[r] = rooms[r];
i++;
}
else
return newRooms;
}
return newRooms;
}
答案 1 :(得分:0)
关联数组中没有顺序概念。您使用了错误的数据结构。如果你想跟踪顺序,那么你需要使用一个本质上跟踪顺序的数据结构,就像常规数组一样。
最有可能的是,您只想以下列方式将关联数组替换为数组:不使用字符串"room1"
作为键,而是使用如下数组:
var rooms = []
rooms[1] = 10 //but maybe you want to start at 0 instead of 1
// because the array WILL have a 0 element
等。然后,您可以随心所欲地获得阵列中的第一个N
项目。要返回rooms[1]
中的任何值,只需拨打rooms[1]
。
您也可以跟踪房间的名称和与之关联的其他数字,如当前的关联数组,以及数据的存储顺序。在那种情况下,也许你想要的是某种房间物体。例如:
room1 = {
room_number : 1,
other_number : 10, //I don't know what this number means in your code
}
然后你可以用你喜欢的方式用这种对象填充数组rooms
。一旦创建了上面的Room1对象,就可以将它推送到这样的数组:
rooms.push(room1);
在这种情况下,订单可能意味着房间号以外的其他东西。这是你的判断。
答案 2 :(得分:0)
正如所有评论所指出的,现在有办法保证前三个&#34; JS中对象的属性,因为它在Object
中没有固有的顺序。因此,如果您使用for (i in obj) {}
循环并在其中放置一个计数器来跟踪您经历的循环次数,那么您可以停在3(例如),不同的浏览器可以返回三种不同的属性。
所以。 。 。尝试存储这样的数据。 。 。它类似于您正在使用的内容,并允许您更轻松地支持数据计算:
var rooms = [
{room: "room1",
number: 10},
{room: "room2",
number: "25"},
{room: "room3",
number: "15"},
{room: "room4",
number: "1"},
{room: "room5",
number: "10"},
{room: "room6",
number: "181"}
];
rooms[0].room
会让你room1
,rooms[0].room
等于10
。 。 。在此之后尽可能多地循环,以获得下一个排队。
Alernately,如果&#34;房间 n &#34;值只是用来枚举值,你需要它们吗?你可以使用一个简单的数组:
var rooms = [10, 25, 15, 1, 10, 181];
有了这个,rooms[0]
将等于10
,rooms[1]
等于25
等等。
在任何一种情况下,都可以轻松地循环(或slicing关闭)前三个条目。
答案 3 :(得分:0)
尝试在rooms
对象的属性名称中使用最后“数字”的“地图”;过滤,在rooms
循环中将选定的属性从res
添加到新的for in
对象
var value = 123;
var rooms = {};
rooms["room1"] = 10;
rooms["room2"] = 25;
rooms["room3"] = 15;
rooms["room4"] = 1;
rooms["room5"] = 10;
rooms["room6"] = 181;
rooms["somrthing"] = value;
var res = {};
var map = "123".split("");
for (var prop in rooms) {
// if property name ends with "digit"; e.g., "1", "2", "3"
if (prop.match(/\d$/) !== null
// if property name is within `map`
&& map.indexOf(prop.match(/\d/)[0]) !== -1) {
// set `prop` at `res` with `prop` value
res[prop] = rooms[prop];
}
};
console.log(res);