Javascript - 重新索引数组

时间:2011-01-21 14:10:36

标签: javascript arrays serialization

Here就是我的榜样。你能告诉我如何让阵列有连续的键

array[0]
array[1]
array[2]

当我有

var testArray = new Array();
testArray[3]="qwerty";
testArray[7]="asdfgh";
testArray[13]="zxcvbn";
var testString = testArray.join();

编者注: 提问者想要重新编制数组索引。

8 个答案:

答案 0 :(得分:31)

对已删除或以前未定义的项目不执行

Array.prototype.filter()。所以你可以这样做:

testArray.filter(function(val){return val});

..为了重新索引你的数组。

或ES6:

testArray.filter(val => val)

答案 1 :(得分:9)

如果您不介意使用javascript 1.6 :(注意:此代码使用jQUery库)

var testArray = new Array();
testArray[3]="qwerty";
testArray[7]="asdfgh";
testArray[13]="zxcvbn";
var testString = testArray.filter(function (item) { return item != undefined }).join();

$(function(){
    $('#write').text(testString);
});

过滤原型:

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var res = [];
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t)
      {
        var val = t[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, t))
          res.push(val);
      }
    }

    return res;
  };
}

答案 2 :(得分:4)

超级简单的功能:

function reindex_array_keys(array, start){
    var temp = [];
    start = typeof start == 'undefined' ? 0 : start;
    start = typeof start != 'number' ? 0 : start;
    for(var i in array){
        temp[start++] = array[i];
    }
    return temp;
}
testArray = reindex_array_keys(testArray);

注意:这会吹掉任何自定义键。结果将始终以数字方式编制索引。你可以添加检查它是否是一个数组但是我倾向于不使用我构建的函数而不是它们的意图。如果您愿意,也可以将索引设置得更高:

testArray = reindex_array_keys(testArray, 3);

将在数组的开头生成3个'undefined'项。然后您可以稍后添加,但我认为最好先testArray.unshift('newValue')然后再重新编制索引。

玩得开心

答案 3 :(得分:3)

您可以使用返回true或其他truthy值的回调过滤数组,因为Array#filter省略了稀疏元素。

如果采用Boolean,结果不仅会过滤稀疏项目,还会过滤具有falsy值的项目。为防止这种情况,请为每个元素返回true的回调。

array.filter(_ => true);

var array = [];

array[10] = 0;
array[20] = 0;
array[30] = 0;

console.log(array.filter(_ => true).join('|'))

答案 4 :(得分:2)

var testArray = new Array();
testArray[3] = "qwerty";
testArray[7] = "asdfgh";
testArray[13] = "zxcvbn";


var isEmpty = function(x) {
   // returns true if x is null and false if it is not.
    if(x!=null){ 
        return true;
    }else{ 
        return false
    } 
}
var newArray=testArray.filter(isEmpty);

var testString2 = newArray.join();

$('#write').text(testString2);   

答案 5 :(得分:0)

你的意思是没有逗号?如果是这样,只需执行此操作var testString = testArray.join("");,或者您可以添加任何您想要的字符。

答案 6 :(得分:0)

尝试

var testArray=testArray.join(" ");

答案 7 :(得分:0)

也许这更容易解决问题:

certificate