Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组不相等_Javascript_D3.js_Underscore.js - Fatal编程技术网

Javascript 数组不相等

Javascript 数组不相等,javascript,d3.js,underscore.js,Javascript,D3.js,Underscore.js,我正在尝试加载一个带有d3的csv文件,并尝试创建一个替换显式2D数组(名为iris_2)的插入。在将两个2D数组与underline.js(使用q.isEqual)进行比较时,我注意到它们并不相等()。更奇怪的是,如果我在检查html页面时使用u.isEqual来比较它们,它会说它们是相等的 这是d3代码: var iris = []; d3.csv("data/iris.csv", function(mydata) { mydata.forEach(function(d) {

我正在尝试加载一个带有d3的csv文件,并尝试创建一个替换显式2D数组(名为iris_2)的插入。在将两个2D数组与underline.js(使用q.isEqual)进行比较时,我注意到它们并不相等()。更奇怪的是,如果我在检查html页面时使用u.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读取的标题:

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
...
以下是“显式”2D数组的前五行:

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'] ...
这是我用来比较两个数组的下划线.js代码:

_.isEqual(iris, iris_2);

对于html代码(参见上面的Codepen链接),返回false,但是对于Chrome html检查器控制台返回true。

d3.csv
是异步的。这意味着,当你到达

document.getElementById("myValue").innerHTML = _.isEqual( iris, iris_2 );
。。。仍然有
虹膜
数组(或者更准确地说,它仍然是空的),结果是

但是,如果您在回调中比较数组
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

实际上,“给时间”给
d3.csv
填充
iris
数组就是你所说的解释:

更奇怪的是,如果我在检查html页面时使用u.isEqual来比较它们,它会说它们是相等的

这是因为,当您检查页面时,
iris
数组已经创建


您可以在此处检查工作代码:

而不是使用
+d[…]
尝试使用
1*d[…]
。这可能有助于消除将数据解释为字符串的可能性。@Manngo-OP代码中的
+
(一元加号)已转换为数字。@nnnn您是对的。