组织阵列推送订单

时间:2015-08-04 09:04:11

标签: javascript jquery

我有一个阵列。我使用函数将项目多次推入此数组。下面是代码的简化版本。

var arr = [];

function pushItems(i){
  //do something with i
  var abc = "string"
  arr.push(abc);

  //do something with i
  var xyz = "string"
  arr.push(xyz);
}

有时在abc之前推送xyz值。有时xyz会在abc值之前被推送。我的问题是我如何始终在' xyz'之前获得abc价值。值?

所以基本上我需要数组值为[abc1, xyz1, abc2, xyz2, abc3, xyz3, ...]等等。如何订购推送?

2 个答案:

答案 0 :(得分:5)

这是错误的。根据这种方法的说明:

  

push()方法将一个或多个元素添加到数组的结尾   返回数组的新长度。

请查看here

有关更正式的方法,请参阅ECMAScript规范here

  

参数将按顺序附加到数组的末尾   它们出现了。数组的新长度作为返回   电话结果。

<强>更新

  

但即使元素添加在数组的末尾,我也是   寻找一种命令我的阵列。

由于这个原因,你可以使用sort函数向它传递一个适当的函数来进行比较。例如,让我们有以下数组

var array = [4,1,2,5,3];

我们想按降序排序,我们可以这样做:

var array = array.sort(function(a,b){ return b-a; });

答案 1 :(得分:2)

由于您需要base64字符串在数组中以任意顺序排列,因此请按您定义的标识符对它们进行排序。

var firstObj = {id: 0, base64: 'asdf'}
var secondObj = {id: 1, base64: 'qwer'}
var arr = []
// do stuff

// callback needs to have something along these lines:
function base64isLoaded(obj){
  arr[obj.id] = obj.base64;
}

现在&#39;前面&#39; image(正如你给出的那样作为例子)可以给出id:0,因此它最终会出现在&#39; 0&#39;阵列的斑点。如果没有关于代码结构的更多信息,我无法提供更多帮助。

编辑:从您的评论(&#34;将多个项目传递到pushItems&#34;),我将假设i(参数)是一个数组而你迭代此数组以将每个元素转换为base64编码的字符串。然后,您希望这些编码字符串以相同的顺序添加到arr ,是否正确?

轻松完成,只需使i成为一个对象数组:

var i = [{source: 'abc'}, {source: 'xyz'}];
pushItems(i){
  for(var c = 0; c < i.length; c++){
    makeIntoBase64(i[c]);
  }
}

makeIntoBase64(obj){
  // this is whatever function that transforms it and takes a callback when it is done
  transform(obj.source, function(result){ //pass the source to be encoded
    //result should be base64 encoded string
    obj.encoded = result;
  });
}

完成所有这些后,数组i包含.source.encoded的对象。如果您需要知道何时完成所有编码,请创建一个计数器并在变换回调中为其添加一个计数器,并每次检查是否counter === i.length。如果是,你知道你已经加载了所有base64字符串并且可以运行另一个函数,将这些图像添加到你的目录或者你需要的任何其他内容:)