我已成功将返回的数据映射到数组(selected.data().map(d=>d)
),并且可以将其内容记录到控制台。但是,数据包括整数和字符串。这样,我只想将字符串记录到控制台。我下面的方法创建一个新变量,并通过theSelection
进行过滤,并返回为typeof
字符串的数据。但是没有任何内容被打印到控制台(并且没有错误被返回)。如果外面有人可以查看我的代码并告诉我我要去哪里,那会很有帮助。
selected = lasso.selectedItems()
.classed("selected", true)
.attr("r", 18);
console.log(selected);
var theSelection = selected.data().map(d=>d);
console.log(theSelection);
var result = theSelection.filter(d => typeof d === 'String');
console.log(result);
for(var i = 0; i < result.length; i++) {
console.log(result[i]);
}
数据
var data = [
["Acid", 0.741593940836, 0.45657115, "Bristol", "Cardiff", "Birmingham"],
["Cannabis", 0.94183423, 0.31475, "Chester", "Swansea", "Brighton"],
["LSD", 0.1367547, 0.936115, "Newcastle", "Cardiff", "Bristol"],
];
答案 0 :(得分:1)
您需要执行typeof d === 'string'
是因为d === typeof "string"
是不正确的,因为d
引用了该值,因此您应检查d
的类型为string
类型。
var theSelection = ['Acid', 'str', 0.123545, 'Bristol'];
var result = theSelection.filter(d => typeof d === 'string');
for (var i = 0; i < result.length; i++) {
console.log(result[i]);
}
答案 1 :(得分:1)
首先,您的地图线:
var theSelection = selected.data().map(d=>d);
..什么都不做。基本上是说,“将数组中的每个元素映射到自身并返回该数组”(与原始数组相同,因为未进行任何转换)。
因此,您的数组theSelected
实际上仍然是矩阵(数组的数组)。因此,您的filter语句要遍历仅包含一个项目的数组(另一个包含六个项目的数组),并通过typeof
检查,因为它不是String
数组,因此未通过。
您将需要利用其他转换将“矩阵”展平为一个数组,如下所示:
const theSelection = [];
selected.data().forEach((arr) => {
arr.forEach((d) => { theSelection.push(d); });
});