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); });
});