Javascript 筛选字符串类型的数组内容
我已经成功地将返回的数据映射到一个数组(Javascript 筛选字符串类型的数组内容,javascript,Javascript,我已经成功地将返回的数据映射到一个数组(selected.data().map(d=>d)),并且可以将其内容记录到控制台。但是,数据包括整数和字符串。有了这个,我希望能够只将字符串记录到控制台。我下面的方法创建了一个新变量,并通过选择进行过滤,并返回类型为字符串的数据。但是没有任何内容被打印到控制台(并且没有返回错误)。如果有人能够查看我的代码并告诉我哪里出了问题,那将是很有帮助的 selected = lasso.selectedItems() .classed("selected"
selected.data().map(d=>d)
),并且可以将其内容记录到控制台。但是,数据包括整数和字符串。有了这个,我希望能够只将字符串记录到控制台。我下面的方法创建了一个新变量,并通过选择
进行过滤,并返回类型为
字符串的数据。但是没有任何内容被打印到控制台(并且没有返回错误)。如果有人能够查看我的代码并告诉我哪里出了问题,那将是很有帮助的
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]);
}
您需要执行
typeof d===='string'
,因为d==='typeof“string”
不正确,因为d
引用了值,您应该检查d
的类型是否为string
类型
var theSelection=['Acid','str',0.123545','Bristol'];
var result=theSelection.filter(d=>typeof d=='string');
对于(变量i=0;i }
首先,您的地图线:
var theSelection = selected.data().map(d=>d);
…什么也不做。它基本上是说,“将数组中的每个元素映射到自身并返回该数组”(这与原始数组相同,因为没有发生转换)
因此,所选的数组实际上仍然是一个矩阵(数组数组数组)。因此,您的filter语句正在迭代一个只包含一个项的数组(另一个包含六个项的数组),并且未通过typeof
检查,因为它是一个数组而不是字符串
您需要利用其他变换将“矩阵”展平为一个数组,如下所示:
const theSelection = [];
selected.data().forEach((arr) => {
arr.forEach((d) => { theSelection.push(d); });
});
它什么也没印,我的朋友。我在这段代码前面放了一系列console.log
语句,看看selection
是否确实包含任何内容,它们确实包含任何内容。但是在结果
之后,它什么也不保存。控制台日志选择
并提供刚刚插入图像的屏幕截图选择
@user172127的值是多少?我只需要它,所以(d=>d)
返回原始数组,然后依次,typeof
检查是检查数组而不是其内容?因此,在原始2d数组中的每个数组上使用forEach
,会将数组中的每个单独元素推送到selection
变量,该变量本质上允许typeof
检查工作?正确吗?是的,将单个数组的每个元素按到所选的theSelection
将得到一个平面数组,其中包含2D数组中的所有值。这样,当您在二维数组上进行迭代时(使用过滤器
),它将检查单个元素而不是整个数组。还有其他一些方法可以展平二维数组,这些方法可能不太直接,但提供的代码行数较少
const theSelection = [];
selected.data().forEach((arr) => {
arr.forEach((d) => { theSelection.push(d); });
});