将JSON结果限制在数组中[重复]

Posted

技术标签:

【中文标题】将JSON结果限制在数组中[重复]【英文标题】:Limit JSON results in array [duplicate] 【发布时间】:2021-11-20 21:17:19 【问题描述】:

我正在调用一些 JSON 结果,其中列出了名为“cast”的数组中的一堆演员。 我正在用这个 JS 调用该列表中的第一项......

let movieCredits = document.getElementById("movieCredits");
movieCredits.innerhtml = out.credits.cast[0].name;

并在这样的 div 中显示它们...

<div id="movieCredits"></div>

我需要列出前 5 个结果(不仅仅是第一个)。 他们是一种简单的方法吗?

【问题讨论】:

JSON 是数据的文本表示。如果您可以使用out.credits.cast[0].name 访问数据,那么该数据不是 JSON,而是已经被解析并表示为对象、数组和原始值的数据。 JSON 结果按标题。 【参考方案1】:

您可以使用 Array.slice 创建一个包含前 5 个结果的新数组:

const firstFive = out.credits.cast.slice(0, 5)

然后您可以从中生成 HTML,具体取决于您想要做什么,例如

const listItems = firstFive.map(actor => `<li>$actor.name</li>`);
movieCredits.innerHTML = `<ul>$listItems</ul>`;

【讨论】:

喜欢这个? movieCredits.innerHTML = out.credits.cast.slice(0, 5).name;那行不通……未定义。 这将尝试访问数组上的名称属性 - 您想访问每个数组元素上的名称属性。看看我的编辑。 @小写【参考方案2】:

您的代码仅显式引用数组的元素 0...您需要能够引用前 5 个元素。然后,使用您引用的那个,您将 innerHTML 设置为那个东西...当您目前这样做,即使您循环遍历数组,您也会继续覆盖innerHTML。您要么需要在循环时构建一个单一的 innerHTML 字符串,然后进行最后的写入......要么在循环时创建新的 HTML 元素并将它们作为子元素添加到目标 div,就像我在下面的 sn-p 中所做的那样。

function populateCast() 

  var out = ;
  out.credits = ;
  out.credits.cast = [
      name: 'actor_one'
    ,
    
      name: 'actor_two'
    ,
    
      name: 'actor_three'
    ,
    
      name: 'actor_four'
    ,
    
      name: 'actor_five'
    ,
    
      name: 'actor_six'
    ,
    
      name: 'actor_seven'
    
  ];

  for (var i = 0; i < 5; i++) 
    var element = document.createElement("p");
    element.innerHTML = out.credits.cast[i].name;
    var target = document.getElementById('movieCredits');
    target.appendChild(element);
  
<html>

<body>
  <div id="movieCredits"></div>
  <button id="castPopulate" onClick="populateCast()">Populate Cast</button>
</body>

</html>

【讨论】:

以上是关于将JSON结果限制在数组中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

错误:字段大于字段限制 (131072) [重复]

如何在 Oracle SQL 中将结果限制为 1 行 [重复]

使用 LitJson 在 C# 中反序列化 JSON 对象数组 [重复]

限制查找结果的数量,头部不起作用[重复]

JS限制数字中的小数位数[重复]

如何在 cloudant 结果 json 中限制 _rev_info