数组不相等
Arrays not equal
我正在尝试使用 d3 加载一个 csv 文件,并正在尝试为显式二维数组(名为 iris_2)创建 drop-in 替换。当用underscore.js(使用_.isEqual)比较两个二维数组时,我注意到它们不相等(check out the Codepen.io code)。更奇怪的是,如果我在检查 html 页面时使用 _.isEqual 来比较它们,它说它们是相等的。
这是 d3 代码:
var iris = [];
d3.csv("data/iris.csv", function(mydata) {
mydata.forEach(function(d) {
d["sepal_length"] = +d["sepal_length"];
d["sepal_width"] = +d["sepal_width"];
d["petal_length"] = +d["petal_length"];
d["petal_width"] = +d["petal_width"];
iris.push([d["sepal_length"], d["sepal_width"], d["petal_length"], d["petal_width"], d["species"]]);
});
});
这是 iris.csv 文件的前五个数据行,我想用 d3 读取 header:
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
...
这是 "explicit" 二维数组的前五行:
var iris_2 = [
[5.1, 3.5, 1.4, 0.2, 'setosa'],
[4.9, 3.0, 1.4, 0.2, 'setosa'],
[4.7, 3.2, 1.3, 0.2, 'setosa'],
[4.6, 3.1, 1.5, 0.2, 'setosa'],
[5.0, 3.6, 1.4, 0.2, 'setosa'] ...
这是我用来比较两个数组的 underscore.js 代码:
_.isEqual(iris, iris_2);
对于 html 代码(参见上面的 Codepen link),此 returns 为假,但对于 Chrome html 检查器控制台为真。
d3.csv
是 异步的 。这意味着,当您到达...
document.getElementById("myValue").innerHTML = _.isEqual( iris, iris_2 );
...还有没有iris
数组(或者更准确地说,还是空的),结果是false
.
但是,如果您比较数组 inside 回调,给时间 d3.csv
填充您的 iris
数组...
d3.csv("iris.csv", function(mydata) {
mydata.forEach(function(d) {
d["sepal_length"] = +d["sepal_length"];
d["sepal_width"] = +d["sepal_width"];
d["petal_length"] = +d["petal_length"];
d["petal_width"] = +d["petal_width"];
iris.push([d["sepal_length"],
d["sepal_width"],
d["petal_length"],
d["petal_width"],
d["species"]
]);
});
var iris_2 = [
[5.1, 3.5, 1.4, 0.2, 'setosa'],
...
];
document.getElementById("myValue").innerHTML = _.isEqual(iris, iris_2);
//comparing inside the callback
});//callback ends here
...您会看到结果是 true
。
实际上,"giving time" 到 d3.csv
填充 iris
数组就是解释你所说的内容:
What's even stranger is that if I use _.isEqual to compare them when inspecting the html page, it says they are equal.
发生这种情况是因为,当您检查页面时,iris
数组已经创建。
您可以在此处查看工作代码:https://plnkr.co/edit/24CypznlScazjcqGKsCq?p=preview
我正在尝试使用 d3 加载一个 csv 文件,并正在尝试为显式二维数组(名为 iris_2)创建 drop-in 替换。当用underscore.js(使用_.isEqual)比较两个二维数组时,我注意到它们不相等(check out the Codepen.io code)。更奇怪的是,如果我在检查 html 页面时使用 _.isEqual 来比较它们,它说它们是相等的。
这是 d3 代码:
var iris = [];
d3.csv("data/iris.csv", function(mydata) {
mydata.forEach(function(d) {
d["sepal_length"] = +d["sepal_length"];
d["sepal_width"] = +d["sepal_width"];
d["petal_length"] = +d["petal_length"];
d["petal_width"] = +d["petal_width"];
iris.push([d["sepal_length"], d["sepal_width"], d["petal_length"], d["petal_width"], d["species"]]);
});
});
这是 iris.csv 文件的前五个数据行,我想用 d3 读取 header:
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
...
这是 "explicit" 二维数组的前五行:
var iris_2 = [
[5.1, 3.5, 1.4, 0.2, 'setosa'],
[4.9, 3.0, 1.4, 0.2, 'setosa'],
[4.7, 3.2, 1.3, 0.2, 'setosa'],
[4.6, 3.1, 1.5, 0.2, 'setosa'],
[5.0, 3.6, 1.4, 0.2, 'setosa'] ...
这是我用来比较两个数组的 underscore.js 代码:
_.isEqual(iris, iris_2);
对于 html 代码(参见上面的 Codepen link),此 returns 为假,但对于 Chrome html 检查器控制台为真。
d3.csv
是 异步的 。这意味着,当您到达...
document.getElementById("myValue").innerHTML = _.isEqual( iris, iris_2 );
...还有没有iris
数组(或者更准确地说,还是空的),结果是false
.
但是,如果您比较数组 inside 回调,给时间 d3.csv
填充您的 iris
数组...
d3.csv("iris.csv", function(mydata) {
mydata.forEach(function(d) {
d["sepal_length"] = +d["sepal_length"];
d["sepal_width"] = +d["sepal_width"];
d["petal_length"] = +d["petal_length"];
d["petal_width"] = +d["petal_width"];
iris.push([d["sepal_length"],
d["sepal_width"],
d["petal_length"],
d["petal_width"],
d["species"]
]);
});
var iris_2 = [
[5.1, 3.5, 1.4, 0.2, 'setosa'],
...
];
document.getElementById("myValue").innerHTML = _.isEqual(iris, iris_2);
//comparing inside the callback
});//callback ends here
...您会看到结果是 true
。
实际上,"giving time" 到 d3.csv
填充 iris
数组就是解释你所说的内容:
What's even stranger is that if I use _.isEqual to compare them when inspecting the html page, it says they are equal.
发生这种情况是因为,当您检查页面时,iris
数组已经创建。
您可以在此处查看工作代码:https://plnkr.co/edit/24CypznlScazjcqGKsCq?p=preview