我有一个阵列。我使用函数将项目多次推入此数组。下面是代码的简化版本。
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, ...]
等等。如何订购推送?
答案 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字符串并且可以运行另一个函数,将这些图像添加到你的目录或者你需要的任何其他内容:)