Javascript 如何考虑JSON对象文件中类似的数据

Javascript 如何考虑JSON对象文件中类似的数据,javascript,arrays,json,reactjs,object,Javascript,Arrays,Json,Reactjs,Object,我正在构建一个应用程序来识别JSON文件中重复的和唯一的数据,并希望输出唯一记录的数量 我有一个JSON对象,它有很多名字和姓氏。我希望能够识别重复的数据,但如果名称相似,则应将数据识别为相同的数据。例如: [ {FirstName: 'Joshua', LastName: 'smith'} {FirstName: 'Joshuaa', LastName: 'smith'} ] 正如您在上面看到的,第二个对象有一个额外的“a”,但我希望它被视为和第一个对象相同的数据块。所以基本

我正在构建一个应用程序来识别JSON文件中重复的和唯一的数据,并希望输出唯一记录的数量

我有一个JSON对象,它有很多名字和姓氏。我希望能够识别重复的数据,但如果名称相似,则应将数据识别为相同的数据。例如:

 [
   {FirstName: 'Joshua', LastName: 'smith'}
   {FirstName: 'Joshuaa', LastName: 'smith'}
 ]
正如您在上面看到的,第二个对象有一个额外的“a”,但我希望它被视为和第一个对象相同的数据块。所以基本上要考虑FirstName和LastName数据中的打字错误


我考虑过使用正则表达式,但我不知道在哪里使用它。

您可以这样做,为相似性设置一个阈值,我在本例中设置了1:

const array = [
    { FirstName: 'Joshua', LastName: 'smith' },
    { FirstName: 'Joshuaa', LastName: 'smith' }
];

const THRESHOLD = 1;

const compareCollections = (document) => {
    array.forEach(element => {
        let consideredSimilar = false;

        if (element.FirstName === document.FirstName) {
            // typo should be in the lastname
            if (_checkDifferences(element.LastName, document.LastName) <= THRESHOLD) {
                // they can be similar
                console.log('SIMILAR LASTNAME');
                consideredSimilar = true;
            }
        } else if (element.LastName === document.LastName) {
            // typo should be in firstname
            if (_checkDifferences(element.FirstName, document.FirstName) <= THRESHOLD) {
                // they can be similar
                console.log('SIMILAR FIRSTNAME');
                consideredSimilar = true;
            }
        }

        console.log('CONSIDERED SIMILAR: ', consideredSimilar);

    });
}

const _checkDifferences= (first, second) => {
    const splittedFirst = first.split('');
    const splittedSecond = second.split('');

    const length = splittedFirst.length > splittedSecond.length ? splittedFirst.length : splittedSecond.length;

    let differences = 0;

    for (let index = 0; index < length; index++) {
        const elementFirst = splittedFirst[index];
        const elementSecond = splittedSecond[index];

        if (elementFirst != elementSecond) {
            differences++;
        }
    }

    return differences;
}

compareCollections(array[1]);
const数组=[
{姓:“约书亚”,姓“史密斯”},
{姓:“约书亚”,姓:“史密斯”}
];
常数阈值=1;
常量比较集合=(文档)=>{
array.forEach(元素=>{
设consideredSimilar=false;
if(element.FirstName==document.FirstName){
//输入错误应为姓氏
if(_checkDifferences(element.LastName,document.LastName)splittedSecond.length?splittedFirst.length:splittedSecond.length;
让差异=0;
for(让索引=0;索引<长度;索引++){
const elementFirst=splittedFirst[index];
常量元素秒=分割秒[索引];
if(elementFirst!=elementSecond){
差异++;
}
}
回报差异;
}
比较集合(数组[1]);

如果我们谈论重复,让我们澄清什么是重复。我可能会弄清楚当一个人有真名“Joshuaa”时的情况。就你的问题而言,这可能是某种形式的重复

对我来说,简单地将数组转换成以key作为lastname的对象(很便宜),然后返回到数组

const array = [
    { FirstName: 'Joshua', LastName: 'smith' },
    { FirstName: 'Joshuaa', LastName: 'smith' }
];

const test = array.reduce((acc, el) => ({
    ...acc,
  [el.LastName]: {...el}
}), {});
const output = Object.values(test);

“我考虑过使用正则表达式,但我不知道在哪里使用它。”-当然,在解析这些数据的同一代码/函数中!:)困难的部分是如何“相似”你希望它是。请阅读大家好,所以在我的应用程序中,我读取的数据来自CSV文件。我的应用程序是React应用程序,我有一个导入功能,因此当用户单击要导入的文件时,会将数据解析为state对象。我希望to数据在每个firstName和lastName中都有一个字母相似