javascript - 方括号中的对象和某些键如何工作?
问题描述
有人可以解释它是如何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);
}
解决方案
我已经在您的代码中添加了注释,您还可以在 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
}
推荐阅读
- sas - 在 Excel 文件上使用 proc import 后,我如何使用该数据?
- python - 出现错误:“'utf-8'编解码器无法解码位置 2 的字节 0x99:无效的起始字节”,同时使用 mysql.connector 将数据写入 csv 文件
- r - ggplot2没有显示所有行
- sql - 如何在 SQL 的同一张表下只显示满足 2 个不同条件的记录
- swift - Xcode 上传错误:“validateAssets (1272)”?
- git - 无法添加自己的 github repo 的 composer 依赖项
- javascript - 将数字四舍五入到小数点后 2 位 JS
- perl - Perl:变量值是“glob”,但应该是“标量”
- c++ - 尝试使用 STD C++ 中的“cyl_bessel_i”
- tensorflow - 提取用于语义分割的训练图像和掩码的 2D 图像块