用循环清空数组的对象?

时间:2018-01-28 19:31:22

标签: javascript ecmascript-6

我试图使用循环清空数组对象:

this.payload =  {
   'names': ['john','chris'],
   'addresses': ['10 king street', '20 king street'],
};

for (const [prop, items] of Object.entries(this.payload)) {
       items = [];
}

我想留下来:

this.payload =  {
   'names': [],
   'addresses': [],
};

但我的循环似乎没有改变价值。

4 个答案:

答案 0 :(得分:2)

通过赋值给一个对象(/ array)变量,你可以该变量切换到另一个对象引用,而不是触及最初分配的对象。

而不是创建一个与现有数组无关的新数组,就像你现在所做的那样(items = []), mutate items数组,如下所示:

items.length = 0;

答案 1 :(得分:2)

您可以保留数组引用并将长度设置为零,而不是分配一个新的空数组,这样可以保留数组以供本地引用。

var payload =  {
   'names': ['john','chris'],
   'addresses': ['10 king street', '20 king street'],
};

for (const [prop, items] of Object.entries(this.payload)) {
    items.length = 0;
}

console.log(payload);

答案 2 :(得分:2)

尝试设置this.payload [prop] = [] 这是一个有效的解决方案。希望它有所帮助!

var payload =  {
   'names': ['john','chris'],
   'addresses': ['10 king street', '20 king street'],
};

for (const prop of Object.keys(this.payload)) {
   payload[prop] = []
}

console.log(payload);

答案 3 :(得分:0)

假设您在代码的其他位置使用this.payload.namesthis.payload.addresses,如果这些参与者需要知道要清除的数组,则需要保留数组引用,使用array.length = 0

  

每当更改length属性时,每个名称都是的属性   一个数组索引,其值不小于新的长度   自动删除。

var payload = {
  'names': ['john', 'chris'],
  'addresses': ['10 king street', '20 king street'],
};

const names = payload.names;
const addresses = payload.addresses;

for (const items of Object.values(this.payload)) {
  items.length = 0;
}

console.log(payload);

console.log(names, addresses); // [] []

但是,如果您不需要保留引用,则可以创建一个新数组并让垃圾收集器处理旧值。

var payload = {
  'names': ['john', 'chris'],
  'addresses': ['10 king street', '20 king street'],
};

const names = payload.names;
const addresses = payload.addresses;

for (const prop of Object.keys(this.payload)) {
  payload[prop] = [];
}

console.log(payload);

console.log(names, addresses); // ["john", "chris"] ["10 king street", "20 king street"]