我是一名JS初学者,正在做基础教程。我正在尝试执行zip函数以返回{videoID:bookmarkID}的列表。举个例子来说:
var videos = [
{
"id": 70111470,
"title": "Die Hard"
},
{
"id": 654356453,
"title": "Bad Boys"
},
{
"id": 65432445,
"title": "The Chamber"
}
],
bookmarks = [
{id: 470, time: 23432},
{id: 453, time: 234324},
{id: 445, time: 987834}
];
}
这不起作用(我得到了意外的令牌'。'):
return Array.zip(videos,bookmarks, function(v, b){
return {v.id: b.id};
});
确实如此,但会返回一个包含{' v&#39 ;: bookmarkID}的列表:
return Array.zip(videos,bookmarks, function(v, b){
return {v: b.id};
});
如何将视频ID作为值bookmarkID的关键?另外,这些是技术上的地图还是物体?感谢。
答案 0 :(得分:2)
尝试:
return Array.zip(videos,bookmarks, function(v, b){
return {[v.id]: b.id};
});
答案 1 :(得分:1)
您可以映射一个并使用相同的索引获取另一个的元素。
var videos = [{ "id": 70111470, "title": "Die Hard" }, { "id": 654356453, "title": "Bad Boys" }, { "id": 65432445, "title": "The Chamber" }],
bookmarks = [{ id: 470, time: 23432 }, { id: 453, time: 234324 }, { id: 445, time: 987834 }],
zipped = videos.map(function (v, i) {
var o = {};
o[v.id] = bookmarks[i].id;
return o;
});
console.log(zipped);

.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6
var videos = [{ "id": 70111470, "title": "Die Hard" }, { "id": 654356453, "title": "Bad Boys" }, { "id": 65432445, "title": "The Chamber" }],
bookmarks = [{ id: 470, time: 23432 }, { id: 453, time: 234324 }, { id: 445, time: 987834 }],
zipped = videos.map((v, i) => ({ [v.id]: bookmarks[i].id }));
console.log(zipped);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)
您的第一次尝试无效,因为您使用的对象的键不正确。使用对象文字定义对象时,键必须是数字或字符串文字。
另一方面,您可以使用类似数组的表示法在对象中创建该键来解决该问题。在JS中,有两种方法可以访问对象中的键的值:使用点表示法或类似数组的表示法。类似数组的表示法允许您访问直到运行时才确定的对象的键(作为变量的键)。例如:
<script type="text/javascript">
$("button.glass_btn").on("click",function(){
$(this).closest("tr").remove();
})
</script>
&#13;
如果您感兴趣,两者之间的表现差异不大。
回到你的问题。 Zip是一个函数,用功能程序员的话来说,它采用一对列表并创建一对列表。从我的观点(以及我认为的功能观点)来看,以与你所做的不同来解决它可能更明智。
例如(并且只是作为一个简单的想法),你可以创建一个执行zip(典型的zip)的函数,并将结果应用于另一个函数,该函数选择你感兴趣的值:
var obj = {};
for(var i = 0; i < 3; i++)
obj[i] = i + 1;
console.log(obj);
&#13;
我使用递归制作了一个简单的zip(有最佳方法可以做到这一点,也可以考虑到列表可以有不同的大小),但我认为它可以帮助你掌握这个想法。
希望有所帮助