首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >equivalent中等价的扩展运算符

equivalent中等价的扩展运算符
EN

Stack Overflow用户
提问于 2019-02-11 16:42:56
回答 5查看 13.9K关注 0票数 7

我有一个javascript函数来填充各个表行的下拉列表,如:

代码语言:javascript
复制
$scope.possibleOptions = getUniqueValues($scope.yypeOptions, 'yypeOption')
    .map(function(id) {
            return {
                id: id,
                name: id
            });

function getUniqueValues(array, prop) {
    return [...new Set(array.map(item => item[prop]))];
}

其中,$scope.yypeOptions是:

代码语言:javascript
复制
$scope.yypeOptions = [{
    yypeOption: "option1"
}, {
    yypeOption: "option2"
}];

我现在必须使它与IE兼容。spread=>运算符是我必须替换的东西。

通过链接。但是,我无法理解如何替换Array特性中的集合。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-02-17 10:59:05

这里有一个简单的方法,可以在IE上工作

代码语言:javascript
复制
data =[{name:"a"}, {name:"a"},{name:"x"}]

function getUniqueValues(array, prop) {
    return array.map(function(item) { return item[prop]; })
    .filter(function (item, index, self){ return self.indexOf(item) === index; }); // distinct
}

console.log(getUniqueValues(data, "name"))

票数 9
EN

Stack Overflow用户

发布于 2019-02-17 10:48:41

getUniqueValues为您执行两件事:删除重复的元素和克隆数组。但是,映射已经是数组的克隆,所以只需删除重复的;您可以使用如下所示:

代码语言:javascript
复制
function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

function getUniqueValues(array, prop) {
    function mapper(item) {
        return item[prop];
    }
    return array.map(mapper).filter(onlyUnique);
}

我建议您看一下webpack和babel这样的东西,以便使用最新的JS,也可以在IE上工作,方法是使用转换程序和填充来生成兼容的代码;)

PS。我现在还没有IE来测试过滤器是否有效,但我很确定它确实有效;否则,您可以用普通的旧版本手动删除副本。

票数 3
EN

Stack Overflow用户

发布于 2019-02-17 10:51:08

您要问的两个语法是箭头函数扩展算子的fat箭头。您可以使用forEach将元素添加到数组中,用标准函数表达式替换前者,而用迭代代替后者。此外,您还需要替换Set构造函数,该构造函数通过可迭代的方式对其进行初始化。相反,您需要一个一个地添加元素。

你可以这样写你的函数。这首先将所有值添加到一个集合中,然后从列表中获取值并返回到一个新数组:

代码语言:javascript
复制
function getUniqueValues(array, prop) {
    // create set
    var set = new Set();
    array.forEach(function (item) {
        set.add(item[prop]);
    });

    // convert set to array
    var result = [];
    set.forEach(function (item) {
        result.push(item);
    });
    return result;
}

因为Internet 11中有对Set (包括forEach )的基本支持,所以您可以使用它而不需要多填充。

下面是一个在11中运行良好的示例:

代码语言:javascript
复制
var options = [
    { yypeOption: "option1" },
    { yypeOption: "option2" },
    { yypeOption: "option1" },
    { yypeOption: "option1" },
    { yypeOption: "option3" },
];

function getUniqueValues(array, prop) {
    var set = new Set();
    array.forEach(function (item) {
        set.add(item[prop]);
    });
    var result = [];
    set.forEach(function (item) {
        result.push(item);
    });
    return result;
}

console.log(getUniqueValues(options, 'yypeOption'));

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54635230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档