高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > JavaScript对象根据自定义属性进行排序

JavaScript对象根据自定义属性进行排序

时间:2022-09-25 21:12:56

相关推荐

JavaScript对象根据自定义属性进行排序

先看下需求。

我想把这很长一大段的带有markdown格式的字符串里包含的image标签的文件名和url解析出来,连同文件名中包含的序号,一起存储到一个数组中。

var input = “” + “\n” +

“” + “\n” +

“”;

然后对这个数组根据序号进行排序,比如上图的image标签顺序是image3, image1和image2,但我希望排序后的顺序是image1, image2和image3.

下面是我的代码。

<html><script>var input = "![image3.png](https://upload-images.jianshu.io/upload_images/2085791-4d8b2cda3a057fb6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)" + "\n" + "![image1.png](https://upload-images.jianshu.io/upload_images/2085791-9aa6232b1426df28.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)" + "\n" + "![image2.png](https://upload-images.jianshu.io/upload_images/2085791-04f2773c126194fe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)";var IMAGE_PATTERN = /^!\[(.*)\]\((.*)\)$/;var IMAGE_INDEX = /^image(\d+).*$/;function MyImage(index, name, url){this.index = index;this.name = name;this.url = url;}var imagePool = [];function sortByIndex(v1,v2){if(v1.index < v2.index ){return -1;}else if(v1.index > v2.index ){return 1;}else return 0;}function getParsedImage(input) {if (input.indexOf("https://upload-images.jianshu.io") < 0 ) {return;} var result = IMAGE_PATTERN.exec(input);if( result.length != 3){return;}var imageIndex = IMAGE_INDEX.exec(result[1]);console.assert(imageIndex.length === 2);return new MyImage(imageIndex[1], result[1], result[2]);}var raw = input.split("\n");for( var i = 0; i < raw.length; i++){var each = getParsedImage(raw[i]);if( !!each){imagePool.push(each);}}imagePool.sort(sortByIndex);debugger;</script></html>

第58行传入数组原生的sort方法的参数是一个排序函数:

执行完之后,就按照我期望的MyImage对象里index属性进行排序了:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。