我有这样的json:
obj = [{"name":"Jim Smith","role":"Author"},{"name":"Julie Smith","role":"Author"}]
我想这样打印作者姓名:
<div class="authors">Authored by Jim Smith & Julie Smith</div>
我正在遍历这样的对象:
$.each( obj, function(k,v) {
$('.authors').append('<span>' + v.name + '</span>');
});
此输出
<div class="authors">Authored by Jim SmithJulie Smith</div>
理想情况下,解决方案还将考虑1、2和2+位作者,因此,如果有2位以上的作者,则只有最后一位作者的值带有&
前缀。
例如:如果有三位作者:Jim Smith, Julie Smith, & John Smith
请注意牛津逗号的用法。
我应该将其包装在if
语句中吗?如何最好地遍历$ .each循环,同时跟踪返回的长度和哪个迭代处于活动状态?
答案 0 :(得分:1)
一种实现此目的的方法是使用map()
从初始对象数组构建名称数组。然后,您可以应用this answer中的逻辑以将值以在UI中显示所需的方式连接在一起。试试这个:
var arr = [{
"name": "Jim Smith",
"role": "Author"
}, {
"name": "Julie Smith",
"role": "Author"
}, {
"name": "Foo Smith",
"role": "Author"
}];
var names = arr.map(function(o) { return o.name; }).join(', ').replace(/,(?!.*,)/gmi, ' and');
$('.authors span').text(names);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="authors">Authored by <span></span></div>