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