2011-01-21 139 views
12

Here是我的榜樣。你能告訴我怎樣可以使陣列已經連續鍵使用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

使數組是什麼? – WarrenFaith 2011-01-21 14:12:38

+1

他可能想重新排列陣列,從他的小提琴中判斷。 – 2011-01-21 14:15:59

+0

@warren;在我的例子中,數組鍵是3,7,13。當我將它們序列化時,它變成了「,,, qwerty ,,,, asdfgh ,,,,,, zxcvbn」。我想要的是「qwerty,asdfgh,zxcvbn」。 – borayeris 2011-01-21 14:16:52

回答

8

如果你不介意使用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; 
    }; 
} 
+0

我只是從JsFiddle複製他的代碼,但會放入其他用戶的重拍。感謝您的高舉。 – Exelian 2011-01-21 14:17:02

0

你的意思是沒有逗號?如果是這樣,只需執行var testString = testArray.join("");或者你可以添加你想要的任何字符。

0

嘗試

var testArray=testArray.join(" "); 
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); 
2

超級簡單的函數:

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「不確定」的項目。你可以稍後再添加它,但我認爲先做testArray.unshift('newValue')然後個人重新索引會更好。

樂趣

20

Array.prototype.filter()未在刪除或以前未定義的項目執行。所以你可以簡單地做:

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

..爲了重新索引你的數組。

或者ES6:

testArray.filter(val => val)