gpt4 book ai didi

javascript - AngularJs 中的数组映射

转载 作者:行者123 更新时间:2023-12-03 12:40:50 25 4
gpt4 key购买 nike

我有两个数组

$scope.tags =  [{ "id": 1, "name": "python" }, { "id": 2, "name": "NodeJs" }, { "id": 3, "name": "git" }]

另一个是

$scope.skillsInterested = [1,2];

想做什么?

我如何映射上述数组并仅打印 id 中的名称$scope.skillsInterested

我想在第一个数组 中打印名称,仅在第二个数组中显示 id。

在得到几个答案后我试过了

var tag_map = {};
for (var x = 0; x < $scope.tags.length; x++) {
tag_map[$scope.tags[x]['id']] = $scope.tags[x]['name'];
}
$scope.skillsInts = $scope.skillsInterested.map(function(x) {
return tag_map[x]

关于运行 console.log

console.log("Result", tag_map);

它有时会给出结果,有时会给出未定义的“ map ”。

TypeError: Cannot read property 'map' of undefined
at controllers.js:141
at angular.js:16383
at m.$eval (angular.js:17682)
at m.$digest (angular.js:17495)
at m.$apply (angular.js:17790)
at l (angular.js:11831)
at J (angular.js:12033)
at XMLHttpRequest.t.onload (angular.js:11966)

提前致谢。

最佳答案

制作如下所示的数据 map :

var tagMap = { 1: "python", 2: "NodeJs" /* etc. */ };

您可以通过遍历标签并向对象添加新属性来完成此操作。 reduce 让您无需创建任何额外变量即可执行此操作。

然后,您可以使用 [] 符号从新创建的对象中选择名称:tagMap[1] 返回 “pyhton”

var tags =  [{ "id": 1, "name": "python" }, { "id": 2, "name": "NodeJs" }, { "id": 3, "name": "git" }]
var selectedExpTags = [1,2];


// Make a map for `id: name`
var tagMap = tags.reduce(function(map, tag) {
map[tag.id] = tag.name;
return map;
}, {});

// Quickly select names from the map:
var selectedNames = selectedExpTags.map(function(id) {
return tagMap[id];
});

console.log(selectedNames);

使用这种方法,您可以最大限度地减少对数据的迭代。 map 的创建在标签 上循环一次。创建带有名称的数组,在选定的标签上循环一次。因此,粗略地说,“循环计数”是 tags.length + selectedTags.length。如果您使用基于 indexOf 的方法,您的循环计数将为 tags.length * selectedTags.length

关于javascript - AngularJs 中的数组映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com