2011-01-21 41 views
12

Here là ví dụ của tôi. bạn có thể cho tôi biết làm thế nào tôi có thể làm cho các mảng có phím liên tiếpJavascript - Lặp lại một mảng

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

khi tôi có

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

Chú ý: Người hỏi muốn reindex mảng của mình.

+1

làm mảng gì? – WarrenFaith

+1

Có lẽ anh ta muốn reindex mảng, đánh giá từ fiddle của mình. –

+0

@warren; trong các khóa mảng mẫu của tôi là 3, 7, 13. Khi tôi tuần tự hóa chúng, nó đã trở thành ",,, qwerty ,,,, asdfgh ,,,,,, zxcvbn". Những gì tôi muốn là "qwerty, asdfgh, zxcvbn". – borayeris

Trả lời

8

Nếu bạn không nhớ sử dụng javascript 1.6: (lưu ý: mã này sử dụng thư viện 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); 
}); 

lọc nguyên mẫu:

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

Tôi chỉ cần sao chép mã của anh ấy từ JsFiddle, nhưng sẽ đưa vào bản làm lại cho người dùng khác. Cảm ơn cho những người đứng đầu lên. – Exelian

+0

Cảm ơn bạn Exalian. – borayeris

0

bạn có nghĩa là nếu không có sự dấu phẩy? nếu như vậy chỉ cần làm điều này var testString = testArray.join(""); hoặc bạn có thể thêm bất kỳ char bạn muốn giữa.

+0

Điều tôi cần là lập chỉ mục lại mảng. Không phải cái này. – borayeris

+0

bạn luôn có thể tham gia Array và sau đó resplit nó với một delimiter nhất định. Có lẽ nó không phải là chuyên nghiệp nhưng 2 dòng mã của nó. – elasticrash

+0

tham gia và tách lại sẽ không hoạt động nếu các phần tử mảng là đối tượng, ví dụ: –

0

Hãy thử này

var testArray=testArray.join(" "); 
+0

Điều tôi cần là lập chỉ mục lại mảng. Không phải cái này. – borayeris

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

chức năng siêu đơn giản:

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

Lưu ý: đây sẽ thổi bay bất kỳ phím tùy chỉnh. kết quả sẽ luôn được lập chỉ mục bằng số. bạn có thể thêm vào kiểm tra cho dù đó là một mảng hay không nhưng tôi có xu hướng chỉ không sử dụng các chức năng tôi xây dựng khác hơn là chúng được dự định sẽ được sử dụng. bạn cũng có thể bắt đầu chỉ mục cao hơn nếu bạn thích:

testArray = reindex_array_keys(testArray, 3); 

sẽ tạo ra 3 mục 'không xác định' ở đầu mảng. sau đó bạn có thể thêm vào nó sau nhưng tôi nghĩ rằng nó sẽ là tốt hơn để làm testArray.unshift('newValue') đầu tiên sau đó reindex cá nhân.

vui chơi

+0

Tham chiếu không bắt buộcLỗi: i không được xác định – fdrv

20

Array.prototype.filter() không được thực hiện trên các mục đã xóa hoặc chưa được xác định trước đó. Vì vậy, bạn có thể chỉ cần thực hiện:

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

..in để tái chỉ mục mảng của bạn.

Hoặc ES6:

testArray.filter(val => val) 
+1

Ding ding ding - câu trả lời ngắn nhất và không liên quan đến việc sử dụng toán tử so sánh lỏng lẻo. – aendrew

+2

Lưu ý rằng nó sẽ trả về một mảng mới mà không ảnh hưởng đến 'testArray'. Bạn có thể muốn xác định lại nó: 'testArray = testArray.filter (val => val);' – pmrotule

+0

@pmrotule nếu bạn muốn giữ nó xung quanh, vâng. Theo ví dụ trong câu hỏi, ngắn nhất sẽ là 'var testString = testArray.filter (val => val) .join();' – Redsandro

Các vấn đề liên quan