Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Reactjs - Fatal编程技术网

Javascript 从阵列内的阵列中删除重复项

Javascript 从阵列内的阵列中删除重复项,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,1-在以下代码段中,我的数组包含以下项 有些项是重复的,所有项都是数组中的数组 arr[0] = ["Family Practice"] arr[1] = ["Family Practice", "General Practice"] arr[2] = ["Family Practice", "General Practice", "Geriatrics"] arr[3] = ["Family Practice"] 如何在数组中删除重复项并返回唯一项 2-使用push for ex将项目添加到

1-在以下代码段中,我的数组包含以下项 有些项是重复的,所有项都是数组中的数组

arr[0] = ["Family Practice"]
arr[1] = ["Family Practice", "General Practice"]
arr[2] = ["Family Practice", "General Practice", "Geriatrics"]
arr[3] = ["Family Practice"]
如何在数组中删除重复项并返回唯一项

2-使用push for ex将项目添加到数组中时

function(items) {
    arr.push(items)
}

这里每次更改项时,数组项也会更改。无论项目是否更改,如何使数组在不修改数组的情况下保持不变

您可以在使用
push
之前检查元素是否存在。有很多方法可以做到这一点,但一个简单的解决方案可能是:

Array.prototype.pushUnique = function pushUnique(item) {
  if (this.indexOf(item) === -1) {
    this.push(item);
  }
}

// Then use it...
const arr = [];

arr.pushUnique("Family Practice");
// arr = ["Family Practice"]

arr.pushUnique("General Practice");
// arr = ["Family Practice", "General Practice"]

arr.pushUnique("Family Practice");
// arr = ["Family Practice", "General Practice"]

不确定这是否符合您的要求,但一般来说,最好的办法是在添加到阵列之前使用它。

这里有一种方法可以做到这一点。当然,有些人会说,您可以扩展阵列原型,使其无处不在,但这将是您的选择。此解决方案不修改现有类型


var arr  = [];

    arr[0] = ["Family Practice"]
    arr[1] = ["Family Practice", "General Practice"]
    arr[2] = ["Family Practice", "General Practice", "Geriatrics"]
    arr[3] = ["Family Practice"]

function makeUunique (collection) {
    return collection.reduce(function(rv,item) {
        if(!rv.includes(item)) {
            rv.push(item);
        }
        return rv;
    },[]);
};

var unique = makeUunique(arr.reduce(function(rv,item) {
    rv = rv.concat(item);
    return rv;
},[]));

console.log(unique);


展示你的尝试。问题应该只限于一个问题。花几分钟的时间通读一遍,至于#1,这很容易研究,在提问之前需要进行基础研究#2需要更多的代码上下文和更好的问题描述,以及将所有项作为键添加到映射中。它的键是数组,没有duplicate@EmileBergeron是的,如果我说要更新一个现有的方法,我会同意的,但即使在你分享的帖子中,它也说“改变一个只由你自己的代码使用的对象的行为是可以的。”这符合这个描述。您也可以选择将其子类化,但我在结尾的评论“只使用indexOf或includes”几乎就是答案。
Array.prototype
不仅用于您自己的代码中。除非您正在编写polyfill,否则修改本机原型从来都不是一个好主意。您能想到这样一种情况吗?
Array.prototype
上的值会被修改,而其他库不希望出现这些值?如果是这样的话,我很乐意相应地编辑或删除我的答案。如果这是针对OSS的,那么我基本上同意你的看法,但似乎不是。比如说,
pushUnique
被语言添加,但行为有所不同。或者另一个库有修改
数组的好主意。prototype
并添加一个
pushUnique
函数,可以在堆栈溢出中找到!您看到了模式。我知道您的答案是基于假设数组是预填充的,但我认为如果我们在最初将其添加到主数组中之前验证重复项会更好,因为如果数组具有相当多的值,则上述解决方案的成本会很高。