Javascript - переиндексация массива

Вот мой пример. Можете ли вы рассказать мне, как я могу заставить массив иметь последовательные ключи

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

когда у меня есть

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

Примечание редактора: Ассер хочет переиндексировать свой массив.

Ответ 1

Если вы не против использования 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

Array.prototype.filter() не выполняется для удаленных или ранее undefined элементов. Поэтому вы можете просто:

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

.., чтобы переиндексировать ваш массив.

Или ES6:

testArray.filter(val => val)

Ответ 3

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);   

Ответ 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') сначала, а потом переиндексировать лично.

получайте удовольствие

Ответ 5

вы имеете в виду без запятых? если это так, сделайте это var testString = testArray.join(""); или вы можете добавить любой char, который вы хотите между.

Ответ 6

Попробуйте Это

var testArray=testArray.join(" ");