我正在代理一個數組,並根據某些條件修改數組來維護數據完整性,但是當數組從代理修改時,數組並沒有很好地放置。Javascript代理:修改數組目標和更新數組(長度,內容)
我遇到的問題是代理數組被*** undefined *** s污染。
如何修改目標對象以使其更正?
下面是一個示例筆:http://codepen.io/anon/pen/ZOPLZg(如果您查看控制檯,則空值實際上是未定義的值)。
在Chrome版本51.0.2704.103(64位)
var test = new Proxy([], {
set: function(target, name, value, receiver) {
if(name != 'length'){
console.log(name, target)
// I want to overwrite values
var i = target.indexOf(value)
if(i > -1){
// doesn't work
target.splice(parseInt(name, 10), 1);
// doesn't work
delete target[name];
target[i] = value;
}else{
target[name] = value;
}
}else{
target[name] = value;
}
console.log(target);
return true;
}
});
function log(){
$('.log').append('<br/>' + JSON.stringify(test) + test.length);
}
log();
test.push('what', 'hi', 'yo');
log();
test.push('what', 'yo');
log();
test.splice(0, test.length)
log();
這裏提交的錯誤工作 https://bugs.chromium.org/p/chromium/issues/detail?id=638414#
目前尚不清楚你想要實現什麼。你說你想覆蓋註釋中的值,但是隻有當數組中的值在你想用相同的值覆蓋它時纔會覆蓋它。這不會使陣列保持不變。看起來你正在嘗試實現你自己的[Set](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set)或者其他的東西,但它不是很清楚。你想要輸出看起來像什麼? – Paulpro
@Paulpro顯然,這只是用於演示數組添加「未定義」值的示例。在實踐中,這些想法是如果存在,則通過ID合併傳入的數據。沒有必要深入研究這個問題,因爲這個例子演示了「不變」數組是如何向數組中添加「未定義」值的。這個問題的目的是要問「爲什麼有未定義的值」或更好的「如何阻止它發生」。 –
要回答你的問題,最終的數組應該是['what','hi','yo']。相反,它是['什麼','嗨','喲',未定義,未定義]。 –