我有一个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是:
$scope.yypeOptions = [{
yypeOption: "option1"
}, {
yypeOption: "option2"
}];我现在必须使它与IE兼容。spread和=>运算符是我必须替换的东西。
发布于 2019-02-17 10:59:05
这里有一个简单的方法,可以在IE上工作
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"))
发布于 2019-02-17 10:48:41
getUniqueValues为您执行两件事:删除重复的元素和克隆数组。但是,映射已经是数组的克隆,所以只需删除重复的;您可以使用如下所示:
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来测试过滤器是否有效,但我很确定它确实有效;否则,您可以用普通的旧版本手动删除副本。
发布于 2019-02-17 10:51:08
您要问的两个语法是箭头函数和扩展算子的fat箭头。您可以使用forEach将元素添加到数组中,用标准函数表达式替换前者,而用迭代代替后者。此外,您还需要替换Set构造函数,该构造函数通过可迭代的方式对其进行初始化。相反,您需要一个一个地添加元素。
你可以这样写你的函数。这首先将所有值添加到一个集合中,然后从列表中获取值并返回到一个新数组:
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中运行良好的示例:
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'));
https://stackoverflow.com/questions/54635230
复制相似问题