关闭

JS对象属性排序的小技巧

时间: 2020-03-02阅读: 151标签: 对象

数组对象去重的时候,如果由于对象里面的内容是一样,但是属性位置不一样,从而导致我们可能出现无法去重,虽然jsON.stringify()的第二个参数能够自行添加属性到数组里面,但有可能出现我们并不知道对象具体有哪些属性。 如下代码

function unique(arr) {
	let unique = {};
	arr.forEach(function(item) {
		unique[jsON.stringify(item)] = item;
	})
	arr = Object.keys(unique).map(function(u) {
		return JSON.parse(u);
	})
	return arr;
}
const books = [
    {
        
        author: "Oyinkan Braithwaite" ,
        name: "My Sister the Serial Killer"
    },
    {
        name: "Educated",  
        author: "Tara Westover" 
    },
    {
        name: "My Sister the Serial Killer",  
        author: "Oyinkan Braithwaite" 
    }
];
unique(books);

简单解决方法 把去重函数里的这句:

unique[JSON.stringify(item)] = item;

改为下面这个:

unique[JSON.stringify(item, Object.keys(item).sort())] = item;

这样子就对上面的属性进行了排序。   ES2016版,支持数组和对象

function orderedJsonStringify(o) {
  return JSON.stringify(Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {}));
}

那么上面代码则改为这样:

function unique(arr) {
	let unique = {};
	arr.forEach(function(item) {
		unique[orderedJsonStringify(item)] = item;
	})
	arr = Object.keys(unique).map(function(u) {
		//Object.keys()返回对象的所有键值组成的数组,map方法是一个遍历方法,返回遍历结果组成的数组.将unique对象的键名还原成对象数组
		return JSON.parse(u);
	})
	return arr;
}
function orderedJsonStringify(o) {
  return JSON.stringify(Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {}));
}

unique(books); 
// {author: "Oyinkan Braithwaite", name: "My Sister the Serial Killer"}
// {author: "Tara Westover", name: "Educated"}
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/10184

浅谈JS包装对象

对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象(wrapper)。

javascript如何判断对象是否相等?

JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕。下面我们就来看一下如何判断对象是否相等。

node中的全局对象是什么?

JavaScript中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。那么在node中全局对象是什么?在浏览器JavaScript中,通常window是全局对象, 而Node.js中的全局对象是globa,所有全局变量(除了 global 本身以外)都是global对象的属性。

如何禁止JavaScript对象重写?

由于JavaScript的灵活性,我们可以轻易地重写(override)一些于其他人定义的对象(object)。换句话说,任何人都可以重写我们所定义的对象。这是一个非常强大的特性,许多开发者都有兴趣试试,来拓展或者修改某些对象的行为。

js 对象高级

对象的创建模式:Object构造函数模式、对象字面量模式、构造函数模式、构造函数+原型的组合模式;继承模式原型链继承 : 得到方法、借用构造函数 : 得到属性

JavaScript重构技巧_对象和值

JavaScript 是一种易于学习的编程语言,编写运行并执行某些操作的程序很容易。然而,要编写一段干净的JavaScript 代码是很困难的。在本文中,我们将介绍一些优化 JS 类和对象的重构思路。

js之global 全局对象 方法

global 作为js的全局对象,但其是无法直接访问的,但是在浏览器中浏览器是将这个对象当做是window对象的一部分,即Date 等Global的属性使用window.Date 可访问到

javascript Es5面向对象和 Es6面向对象

javascript es6之前的面向对象方法:一般使用构造函数来实现。通过ES6的class 类来创建结果和上面用构造函数创建的是一样的;当然里面也可以写方法 function;用构造函数本身 直接点 ▪ 上的 属性或者 function() 函数 叫静态属性或方法; 一般不会这样做;

Reflect对象

将Object 对象上的属于语言内部的方法放到 Reflect 对象上,从 Reflect 上获得语言内部的方法 ;修改某些 Object 方法的返回结果,让其变得更合理。让Object的操作都变成函数行为。Reflect 对象的方法与 Proxy 对象的方法一一对应。

js判断一个对象是否为空对象

最近遇到一个问题,用vue循环一个数组,展示一些海报图片。数组为空的话是不会遍历的,为了不让能够出现默认图片,这也就需要在数组中增加一个默认空对象arr[{}]。问题来了,提交的时候怎么判断这个对象是空的呢?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!