0

JS 对象的新手,我只需要有人向我解释,为什么在true从数组中添加重复值时对象属性会变成。下面是我使用forEach()orreduce()方法删除重复项的示例。对undefined我来说很有意义。只有true's,我还不明白。

const names = ['James','John', 'James','Bob','John','Steve', 'James']

 let unique = {};
   names.forEach(el => {    
     console.log(unique[el])
    if (!unique[el]) unique[el] = true;    
  });

console.log result inside forEach():
 /*
unique['James'] = undefined
unique['John'] = undefined
unique['James'] = true
unique['Bob'] = undefined
unique['James'] = true
unique['Steve'] = undefined
unique['James'] = true 
*/

console.log(Object.keys(unique)); // [ 'James', 'John', 'Bob', 'Steve' ] 

使用reduce()方法相同:

Object.keys(names.reduce((a,v) => {
  if(!a[v]) a[v] = true;
  return a;
},{}))

// [ 'James', 'John', 'Bob', 'Steve' ] 
 

4

1 回答 1

0

首先它未定义,它看起来像

  1. 第一圈

console.log(unique["James"])// 不明确的

if (!unique["James"]) { unique["James"] = true; }// 它创建 { James: true }

  1. 第二个圈子(“詹姆斯”已经存在)

console.log(unique["James"])// 真的

// 如果语句不起作用

以下是解决问题的简单示例

const names = ['James','John', 'James','Bob','John','Steve', 'James'];

// example for array
let uniqueArray = [];
for(i=0; i < names.length; i++) {
  if(uniqueArray.indexOf(names[i]) === -1) {
    uniqueArray.push(names[i]);
  }
}
console.log(uniqueArray)


// example for object 
const uniqueObject = {};

names.forEach(el => uniqueObject[el] = true);
console.log(uniqueObject)
uniqueArray = Object.keys(uniqueObject)
console.log(uniqueArray)

于 2021-01-08T08:08:42.560 回答