有人可以看看这个并理解如何将其变成原生JS。
_.chain(polls).deepClone().indexBy("id").value()
我试图查找deepClone
,但无法找到它的来源。这是我接手的代码,对它并不熟悉。谢谢你的帮助。
以下是我的一个工作示例:
function loadPolls () {
return ScheduledEventService.getPolls($scope.webcastId)
.then(function(polls){
$scope.originalPolls = _.chain(polls).deepClone().indexBy("id").value();
$scope.webcast.polls = polls;
_.each(polls, function(poll){
poll.answers = _.map(_.range(Polls.MaxAnswers), function(i){
return (poll.answers && poll.answers[i]) || {};
});
poll.readOnly = poll.status !== "Closed" || poll.totalResponses > 0;
});
});
}
答案 0 :(得分:1)
deepClone
和indexBy
(来自Underscore)都没有直接的原生等价物。
indexBy
很容易:
function indexBy(object, key) {
return Object.keys(object).reduce(result, k) {
const value = object[k];
result[value[key]] = value;
return result;
});
}
这使用reduce
遍历输入对象(实际上,遍历其键),并构建一个result
对象,其键是每个id
属性的值子对象,其值是子对象本身,就像_.indexBy
那样。
deepClone
你必须找到一些版本的。 SO上有很多。
有了这些,你的逻辑就是
indexBy(deepClone(polls), 'id')
如果只需要一个级别的深度克隆,您可以将上面的行更改为
result[value[key]] = Object.assign({}, value);
然后再做
indexBy(polls, 'id')