2012-11-26 21 views
2

RegExp.exec功能returns something that looks like a hybrid array。它是一個數組,但它有屬性。如何製作具有屬性的JavaScript數組?

console.log(/d(b+)(d)/i.exec("cdbBdbsbz")); 
// => ["dbBd", "bB", "d", index: 1, input: "cdbBdbsbz"] 

我可以叫result[0]result[1]result.indexresult.input

如何讓我的自己?

[0, 1, "a": 1]顯然是一個語法錯誤,並{"0": 1, "1": 1, "a": 1}確實給我一個對象,我可以索引和訪問屬性,但它不是相同因爲什麼被exec返回。

我試着用__proto__做:

arr = [1, 2, 3]; 
arr.__proto__.a = 1 // arr.a is 1 now 

但是就像當上exec結果運行它console.log不顯示的屬性,所以我懷疑這是仍然不一樣的東西。

回答

5

很容易 - 在JavaScript數組只是一個對象,你可以將你喜歡的任何性質:

var test = ["foo","bar","baz"]; 
test.index = 1; 
test.input="foobarbaz"; 
console.log(test); 

console.log看起來與由regex.exec返回的一個。

活生生的例子:http://jsfiddle.net/9rCmJ/

+0

哇。我現在覺得很愚蠢。 – crdx

3

你的意思是?

var arr = [0, 1]; 
arr.a = 1; 
3

數組也是一個對象,這樣你就可以直接設置屬性:

var myArray = ['a', 'b']; 
console.log(typeof myArray); // 'object' 
myArray.say = 'hi'; 
3

做的兩個步驟:

var a = [1, 2, 3]; 
a.test = "Hello world"; 
相關問題