Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 - Fatal编程技术网

Javascript 从具有子字符串的数组中查找重复项

Javascript 从具有子字符串的数组中查找重复项,javascript,Javascript,我有两个数组,它们以不同的方式写入同一地址。例如, 例: 由于地址的结构,我想我可以得到数组中每个项的子字符串,然后对其进行过滤,但我遇到了一个问题,它似乎没有存储匹配项,而它应该为前12个字符找到大约100个匹配的地址 for (let i = 0; i < array1.length; i++) { let array1 = array1[i]; let arr1Substring = array1.substring(0, 12); c

我有两个数组,它们以不同的方式写入同一地址。例如, 例:

由于地址的结构,我想我可以得到数组中每个项的子字符串,然后对其进行过滤,但我遇到了一个问题,它似乎没有存储匹配项,而它应该为前12个字符找到大约100个匹配的地址

for (let i = 0; i < array1.length; i++) {
        let array1 = array1[i];
        let arr1Substring = array1.substring(0, 12);
        console.log(arr1Substring);

        let intersection = array1.filter(arr1Substring => array2.includes(arr1Substring));
        console.log(intersection);
    };
for(设i=0;iarray2.includes(arr1Substring));
控制台日志(交叉点);
};

第一个问题是这个语句
让array1=array1[i]
array1
重新指定为其第i个子项,第二个是不正确地使用array.filter()来检查交叉点

let array1 = [
   '12345 Baker Street Lexington, KY 12345',
   '20385 Money Road New York, NY 12035'
];

let array2 = [
    '12345 Baker St. Lexington, Kentucky 12345',
    '96969 Smithfield Parkway. Boise, Idaho 56845'
];

for (let i = 0; i < array1.length; i++) {
    let arr1Substring = array1[i].substring(0, 12);
    console.log(arr1Substring);

    let intersection = array2.filter(arr => arr.includes(arr1Substring));
    console.log(intersection);
};
让数组1=[
“肯塔基州列克星敦贝克街12345号,邮编12345”,
纽约州纽约市货币路20385号,邮编12035
];
设array2=[
“12345贝克圣列克星敦,肯塔基州12345”,
“96969史密斯菲尔德公园路,爱达荷州博伊西56845”
];
for(设i=0;iarr.includes(arr1Substring));
控制台日志(交叉点);
};
修复原始代码 名字应该帮助你写代码,而不是和你打架。让我们试试你的例子,使用更好的名称:

let addresses1 = [
  '12345 Baker Street Lexington, KY 12345',
  '20385 Money Road New York, NY 12035'
];

let addresses2 = [
  '12345 Baker St. Lexington, Kentucky 12345',
  '96969 Smithfield Parkway. Boise, Idaho 56845'
];

for (let i = 0; i < addresses1.length; i++) {
  let address = addresses1[i];
  const first12LettersOfAddress = address.substring(0, 12);
  console.log(first12LettersOfAddress);

  const commonAddresses = addresses1.filter(address => addresses2.includes(address));
  console.log(intersections);
};
let addresses1=[
“肯塔基州列克星敦贝克街12345号,邮编12345”,
纽约州纽约市货币路20385号,邮编12035
];
让地址2=[
“12345贝克圣列克星敦,肯塔基州12345”,
“96969史密斯菲尔德公园路,爱达荷州博伊西56845”
];
for(设i=0;iaddresses2.includes(address));
控制台日志(交叉点);
};
我更改了这里的名称以帮助澄清。您应该停止对多个变量使用相同的名称,因为一旦重新声明该变量,您将无法再访问原始变量

一种更好的方法——地理编码 也就是说,您应该使用不同的方法来修复此问题。如果您继续尝试比较字符串的花絮,可能会遇到问题。例如,“123 Stack Ave”和“123 Stack Avenue”可能不会显示为重复项,而实际上它们是重复项。您应该对每个地址进行地理编码,以确保它们的格式相同,并比较结果


您可以使用或来执行此操作。

太多错误ray1[0]是一个字符串,因此没有用于它的筛选方法。
let addresses1 = [
  '12345 Baker Street Lexington, KY 12345',
  '20385 Money Road New York, NY 12035'
];

let addresses2 = [
  '12345 Baker St. Lexington, Kentucky 12345',
  '96969 Smithfield Parkway. Boise, Idaho 56845'
];

for (let i = 0; i < addresses1.length; i++) {
  let address = addresses1[i];
  const first12LettersOfAddress = address.substring(0, 12);
  console.log(first12LettersOfAddress);

  const commonAddresses = addresses1.filter(address => addresses2.includes(address));
  console.log(intersections);
};