通过REST API调用返回具有唯一值和密钥对的唯一对象?

时间:2019-05-14 19:05:26

标签: javascript sharepoint-2013

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

各种商品= data.d.results [i];

console.log(items);

对象

对象

对象

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

对象

 ticket : 1234
 size : 3

对象

  ticket : 4567
  size : 5

对象

  ticket : 1234
  size : 8

我正在寻找的是从变量项目= 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>

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

3 个答案:

答案 0 :(得分:0)

这应该对您有用:

 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))

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

<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数组:

enter image description here

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

enter image description here