我有一個對象數組,其中的鍵是一個md5字符串,值是一個對象 [0315778255cca8d2f773642ad1d3678f] = {a:12,b:34}。我需要刪除基於他們的關鍵數組元素,我試着拼接,但失敗,因爲我想這些鍵是非數字。 我也嘗試按位置進行拼接,但是失敗了,甚至刪除了元素,但我們都知道它並不理想。使用非數字鍵刪除數組元素
我可以改變我的實現從數組到對象,但也會有相同的問題或多或少我想。
任何想法歡迎
我有一個對象數組,其中的鍵是一個md5字符串,值是一個對象 [0315778255cca8d2f773642ad1d3678f] = {a:12,b:34}。我需要刪除基於他們的關鍵數組元素,我試着拼接,但失敗,因爲我想這些鍵是非數字。 我也嘗試按位置進行拼接,但是失敗了,甚至刪除了元素,但我們都知道它並不理想。使用非數字鍵刪除數組元素
我可以改變我的實現從數組到對象,但也會有相同的問題或多或少我想。
任何想法歡迎
splice
確實有關陣列索引(作爲陣列的數字屬性的稱呼),不是關於其他屬性。
從對象(包括數組)刪除一個屬性,使用delete
:
delete theArray['0315778255cca8d2f773642ad1d3678f'];
儘管它相似的其他語言「刪除」,delete
在JavaScript中有沒有(直接)做記憶管理;它所做的就是從對象中刪除一個屬性(完全是這樣;它不會將屬性的值設置爲undefined
或其他)。
備註:如果你是只有使用非數字屬性,你可能根本不需要數組。使用JavaScript的Array
類型的唯一原因是,如果您需要特殊處理,它會提供名稱均爲數字,屬性爲length
(僅與數字屬性相關)的屬性,以及來自Array.prototype
的內容 —其中沒有任何內容會執行任何操作其他非索引屬性。
重新下方的評論:
刪除葉中的元素代替不確定的。我需要完全擺脫它
不,delete
完全刪除屬性。它不會將undefined
代替。您可能會認爲這樣做,因爲任何時候您嘗試從不存在的對象中檢索屬性時,都會返回undefined
。例如: -
var obj = {}; // Object with no "foo" property at all
var x = obj.foo;
console.log("x = " + x); // "x = undefined"
可以證明該財產確實是通過使用hasOwnProperty
或刪除in
:
var obj = {};
console.log('foo' in obj); // "false"
console.log(obj.hasOwnProperty('foo')); // "false"
in
將檢查對象和它的原型鏈; hasOwnProperty
只是檢查對象本身。
反觀delete
:
var obj = {};
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj.foo;
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj['foo'];
console.log(obj.hasOwnProperty('foo')); // "false"
請注意,如果foo
是有效標識符,則delete obj.foo;
和delete obj['foo'];
都可以使用。但是,對於名稱不是有效標識符的屬性(如您的md5總和),您必須像上面顯示的那樣使用帶括號的字符串(delete theArray['0315778255cca8d2f773642ad1d3678f'];
)。
delete在元素處留下未定義的元素。我需要完全擺脫它 – mbouclas
@mbouclas:不,它不。我已經添加了答案來解釋你所看到的。 –