后台返回对象数组,对象属性相同时,只取一个对象

后台返回的数据:

[
  {confirmCharge: "0.00", orderId: "--", changeId: "1", realName: "王五", totalConfirmCharge: "0.00",…},
  {confirmCharge: "0.00", orderId: "288783482594267136", changeId: "", realName: "王五",…},
  {confirmCharge: "0.00", orderId: "--", changeId: "1", realName: "王五", totalConfirmCharge: "0.00",…},
  {1: 1, totalOrderTimes: 2}
]

要求:

changeId相同的项,只取一条数据,changeId为空,原样取出,最后一条数据不取

目标数据:

[
  {confirmCharge: "0.00", orderId: "--", changeId: "1", realName: "王五", totalConfirmCharge: "0.00",…},
  {confirmCharge: "0.00", orderId: "288783482594267136", changeId: "", realName: "王五",…}
]

思路:

把changeId属性值存到一个arr数组,存目标数据前将每一项的changeId和arr中的值进行对比,如果相同,就不取该项

实现代码:

var arr = [],ifContain
var objArr = [
  {confirmCharge: "0.00", orderId: "--", changeId: "1", realName: "王五", totalConfirmCharge: "0.00",…},
  {confirmCharge: "0.00", orderId: "288783482594267136", changeId: "", realName: "王五",…},
  {confirmCharge: "0.00", orderId: "--", changeId: "1", realName: "王五", totalConfirmCharge: "0.00",…},
  {1: 1, totalOrderTimes: 2}
]
var newArr = []
// console.log(arr)
// arr用来存储changeId  ifContain用来判断当前元素中的changId是否在arr中
newArr.push(objArr[0])
if(objArr[0].changeId){
    arr.push(objArr[0].changeId)
}

for(var i=1;i<objArr.length-1;i++){
    if(!objArr[i].changeId){
        newArr.push(objArr[i])
    }if(objArr[i].changeId){
        ifContain = contains(arr,objArr[i].changeId)
        if(!ifContain){
            newArr.push(objArr[i])
            arr.push(objArr[i].changeId)
        }
    }
}

    // JS判断元素是否在数组内的实现代码
contains(arr,obj) {
    let length = arr.length
    while(length--){
        if(arr[length] === obj){
            return true
        }
    }
    return false
}
时间: 2024-08-02 12:54:16

后台返回对象数组,对象属性相同时,只取一个对象的相关文章

js对象数组按属性快速排序

前一篇<关于selector性能比赛>中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序.按所推荐的程序在IE下跑了下,的确,排序耗时很小. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /* * 快速排序,按某个属性,或按“获取排序

不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma

关于json_encode一个二维数组,返回一个数组对象还是对象对象

$users = array( '1'=>array('id'=>1,'age'=>'1'), '2' => array('id'=>2,'age'=>'2'), 这个二维数组的索引值若果是从1开始,返回的就是对象对象 <?php $users = array( array('id'=>1,'age'=>'1'), array('id'=>2,'age'=>'2'), array('id'=>3,'age'=>'3'), arr

valueForKeyPath获取对象数组的属性

1 [self.groups valueForKeyPath:@"name"] 指groups 是一组group对象的数据,group对象里name的属性 那么上面的意思就是返回每个group对象里name属性的值 [group valueForKey:@"name"] 指是返回这个group对象里的name属性值 2 setValuesForKeysWithDictionary  通过字典给对象的属性赋值

JS 字符串对象 数组对象 函数对象 函数作用域

一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.ValueOf() : 返回最适合该对象的原始值.对于许多对象,该方法返回的值都与 ToString() 的返回值相同 11种内置对象 包括: Array ,String , Date, Math, Boolean, Number  Function, Global, Error, RegExp ,

JS向后台传递json数组对象

var Obj = []; //一下代码可以循环插入 var returnObj = new Object();//创建一个对象 returnObj.id = "123": returnObj.money = 456""; Obj.push(returnObj); JS中将Obj对象进行序列化操作 Obj = JSON.stringify(Obj); //发送ajax请求$.ajax({ type : "POST", url : top.base

ES6 set和map数据结构对对象数组去重简单实现

自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [...new Set(arr)] } console.log(unique(arr)) // [1, 2, 3, 4] 但是当数组的项不再是简单的数据类型时,比如是对象时,这种方法就会导致错误,比如下面的结果 let arr = [ { name: 'a', num: 1}, { name: 'b',

类中属性返回形式(对象,关联数组,索引数组)

class A { public $x, $y; function __construct($x, $y)  { $this->x = $x; $this->y = $y; } function get_value($arr = true)  { if($arr == 'arr')   { // 类中属性以关联数组形式转换返回 return get_object_vars($this); }else if($arr == 'obj')   { //类中属性以对象形式返回 return $thi

使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta htt