【问题标题】:Return unique objects with unique value and key pair from REST API call?从 REST API 调用返回具有唯一值和密钥对的唯一对象?
【发布时间】:2019-05-14 19:05:25
【问题描述】:

Console log Object 底部数组包含多个从 SharePoint 列表的 REST API 调用返回的对象。

var items = data.d.results[i];

console.log(项目);

对象

对象

对象

在上述实例中,rest 调用返回了 3 个对象,其中两个对象具有相似的键,用于相同的票证值

对象

 ticket : 1234
 size : 3

对象

  ticket : 4567
  size : 5

对象

  ticket : 1234
  size : 8

我正在寻找的是 从 var items = data.d.results[i]; 中仅返回 2 个对象;具有唯一键值对的数组,如底部,顺序无关紧要。 JavaScript 或 JQuery 有效。

对象

    ticket : 1234
    size : 3

对象

    ticket : 4567
    size : 5


<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript">
    $(function () {
        ExecuteOrDelayUntilScriptLoaded(getListItems, "sp.js");
    });
    function getListItems() {     
            $.ajax({
                url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listname + "')/Items?$Select=Title,ticket",
                method: "GET",
                headers: {
                    "Accept": "application/json;odata=verbose",
                },
                success: onSuccess,
                error: onError
            });

       function onSuccess(data){
        for(var i=0; i<data.d.results.length; i++){
          var items = data.d.results[i];
          console.log(items);
          }
         }
        };

</script>

根据唯一唯一的票列过滤对象并返回每个列表项(对象)的所有元数据

【问题讨论】:

  • 请检查发布的解决方案,让我知道这是否适合您?

标签: javascript sharepoint-2013


【解决方案1】:

这应该适合你:

 var results=[
  {
     ticket : 1234,
     size : 3
  },{
     ticket : 3434,
     size : 2
  },{
     ticket : 1234,
     size : 9
  },{
     ticket : 1234,
     size : 93
  }
];  
const filterResults=(results)=>{
  const flags=[],output=[];
  results.forEach((result)=>{
    if(flags.indexOf(result.ticket)<0){
      output.push(result)
      flags.push(result.ticket)
    }
  })
  return output;
}
console.log(filterResults(results))

【讨论】:

  • 我收到 Uncaught TypeError:Cannot read property 'forEach' of undefined,为了清楚起见,var items = data.d.results[i];在控制台日志打印上将对象返回为这些i.stack.imgur.com/PRvta.png
  • 你是如何尝试运行这个的?
  • 是的,您需要将结果数组传递给filterResults 方法,如filterResults(data.d.results) 并删除该循环,这已在filterResults 函数中完成
【解决方案2】:

如果可能,您应该考虑在后端执行此操作。如果你有另一个客户,你会怎么做?再次编程相同的逻辑?

【讨论】:

  • 没有后端访问权限,只适用于互联网
【解决方案3】:

可以像这样得到票列的唯一值:

<script src="https://code.jquery.com/jquery-1.12.4.js" type="text/javascript"></script>
<script type="text/javascript">

    function getListItems(url, listname, query, complete, failure) {
        $.ajax({
            url: url + "/_api/web/lists/getbytitle('" + listname + "')/items" + query,
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: function (data) {
                complete(data.d.results); 
            },
            error: function (data) {
                failure(data);
            }
        });
    }


    getListItems('http://sp','UniqueValue','?$select=ticket',

     function(items){    
         console.log(items)

         var UniqueTickets = groupBy(items,'ticket');
          //This gives unique value array
           console.log(UniqueTickets)


        },


        function(error){
           console.log(JSON.stringify(error));
        }


    );

    function groupBy(items,propertyName)
    {
        var result = [];
        $.each(items, function(index, item) {
           if ($.inArray(item[propertyName], result)==-1) {
              result.push(item[propertyName]);
           }
        });
        return result;
    }
    </script>

这是完整的 data.d.results 数组:

这是转换后的唯一票据数组:

【讨论】:

  • 您的代码似乎只返回过滤后的票号,我正在寻找过滤器相同的方式,但返回带有所有元数据的对象
  • @SokeTelesh,您可以将列名传递给 GroupBy 函数,用于其他元数据列。
猜你喜欢
  • 2022-01-16
  • 2017-11-16
  • 2011-05-23
  • 2021-01-15
  • 1970-01-01
  • 2021-01-24
  • 2016-05-15
  • 1970-01-01
  • 2023-01-10
相关资源
最近更新 更多