如何使包含一些特殊对的元素成为数组中的第一个?

时间:2012-01-29 04:43:17

标签: javascript jquery arrays sorting

我在一些for_each循环中创建了具有user_images.push({'href' : value.href, 'title' : value.title });代码的JSON数组。我想知道如何在数组中首先包含'href' : my_href之类的元素?

2 个答案:

答案 0 :(得分:2)

你没有“JSON数组”,你有一个JavaScript数组(JSON是数据的字符串表示)。

但无论如何,你似乎在说的是你有一个数组user_images,它包含每个都有href属性的对象,并且你想要使它成为一个对象特定的href属性是数组中的第一个属性。您要查找的特定值存储在名为my_href的变量中。如果我做对了,请继续阅读...

我猜你当前的代码看起来有点像这样:

var user_images = [];
for (value in someObjectThatYouDoNotShowInYourQuestion)
   user_images.push({'href' : value.href, 'title' : value.title });

要查找数组中href等于变量my_href的项,您只需循环遍历数组,直到找到该项,然后使用.splice() method删除它从当前位置和unshift() method将它添加到数组的开头:

var item,
    i;
for (i = 0; i < user_images.length; i++) {
   if (user_images[i].href === my_href) {
      item = user_images[i];
      user_images.splice(i,1);
      user_images.unshift(item);
      break;
   }
}

如果未找到匹配项,则数组将保持不变。

注意:您实际上并不需要我的代码中显示的item变量。我把它放在可读性中,显而易见的是你存储了对你正在寻找的对象的引用,然后删除它,然后把它放在数组的开头,但是给出了.splice()方法返回已删除项的数组,您可以使用以下单行替换for循环中的这三行:

user_images.unshift(user_images.splice(i,1)[0]);

答案 1 :(得分:2)

遍历数组以找到具有特定值的对象,然后将其从数组中删除并作为第一个插入:

$.each( user_images, function( index ) {
    if( this.href === my_href ) {
        user_images.unshift( user_images.splice( index, 1 )[0] );
        return false; //stop the loop
    }
});

user_images[0].href现在应该是my_href