首页 > 解决方案 > 方括号中的对象和某些键如何工作?

问题描述

有人可以解释它是如何seen[item]工作的吗?

var a = ["a","a","a","b","b","c","D","D","e",6,6,7,8,9,"a",'b','a',"c","","","",""];

function uniq_fast(a) {
    var seen = {};
    var out = [];
    var len = a.length;
    var j = 0;
    for(var i = 0; i < len; i++) {
         var item = a[i];
         if(seen[item] !== 1) {
               seen[item] = 1;
               out[j++] = item;
         }
    }
    return out;
}

var e = uniq_fast(a);
console.log(e);

undefined每次都返回:

var a = [1,1,1,1,1,2,2,3,4,4,4,4,4,5,"a",'b','a',"c"];
for(var i = 0; i < a.length; i++) {
  var seen = {};
  var item = a[i];
  var x = seen[item];
  console.log(x);
}

标签: javascriptarrays

解决方案


我已经在您的代码中添加了注释,您还可以在 for 循环之前检查谷歌开发者工具(或其他浏览器等效项)设置断点,并逐步查看每个变量的值。

var a = ["a","a","a","b","b","c","D","D","e",6,6,7,8,9,"a",'b','a',"c","","","",""];

function uniq_fast(a) {
    var seen = {};
    var out = [];
    var len = a.length;
    var j = 0;
    // if i == 0;
    for(var i = 0; i < len; i++) {
         var item = a[i]; // item is "a" because that's first item in array
         if(seen[item] !== 1) {
               seen[item] = 1; // seen is {"a": 1} it's the same as seen['a'] = 1
               out[j++] = item;
         }
    }
    return out;
}

在您的第二个代码中:

var a = ["a","a","a","b","b","c","D","D","e",6,6,7,8,9,"a",'b','a',"c","","","",""];
for(var i = 0; i < a.length; i++) {
  var seen = {}; // you have empty object
  var item = a[i]; // item is "a"
  console.log(seen[item]); // this is undefined because seen["a"] is empty,
                           // you never adding anything to seen
}

推荐阅读