所以我有一个类似于下面的对象数组:
var objs = [ {key:‘address’,value:‘1234 street’}, {key:‘nameAndTitle’,价值:‘John Smith,CEO’}, {key:‘contactEmail’,value:’…
您可以创建一个以正确顺序推送对象的新数组 的 这不会修改您的原始数组 强> 。
如果您不介意修改原始数组,可以调用sort函数来检查中的键位置 keys 排列 (我相信你会得到一些答案来帮助你使用这些方法)
keys
的 编辑 强> @Nina Scholz做得很快^^
const objs = [{ key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }, ]; const keys = [ 'nameAndTitle', 'contactPhone', 'contactEmail', 'address', ]; const array = keys.reduce((tmp, x) => { const item = objs.find(y => y.key === x); if (item) { tmp.push(item); } return tmp; }, []); console.log(array);
如果可以改变阵列,你可以使用 sort 功能如下:
sort
var objs = [{ key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' } ] var keys = [ 'nameAndTitle', 'contactPhone', 'contactEmail', 'address', ] objs.sort(function(a, b) { return keys.indexOf(a.key) - keys.indexOf(b.key); }); console.log(objs)
你可以这样做:
循环通过字符串数组。将值(nameAndTitle)与obj-array的相同索引的值进行比较。如果它不匹配,请在obj-array中的key-tag中搜索该字符串,并将其移动到正确的索引。多数民众赞成我将如何做到这一点
您可以获取索引并按其三角形排序。
var objs = [{ key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }], keys = ['nameAndTitle', 'contactPhone', 'contactEmail', 'address']; objs.sort((a, b) => keys.indexOf(a.key) - keys.indexOf(b.key)); console.log(objs);
.as-console-wrapper { max-height: 100% !important; top: 0; }
为了完全控制订单,您可以使用所需订单的值进行操作,并使用值小于所有其他值的默认属性,将未知键排序到顶部或者将值大于所有其他值到底部数组。
这种方法也适用于花式排序方案,如果需要,未知项目会分类到中间。
var objs = [{ key: 'localPhone', value: '1234567890' }, { key: 'status', value: 'open' }, { key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }], order = { nameAndTitle: 1, contactPhone: 2, contactEmail: 3, address: 4, default: Infinity }; objs.sort(({ key: a }, { key: b }) => (order[a] || order.default) - (order[b] || order.default)); console.log(objs);
ES5
var objs = [{ key: 'localPhone', value: '1234567890' }, { key: 'status', value: 'open' }, { key: 'address', value: '1234 street' }, { key: 'nameAndTitle', value: 'John Smith, CEO' }, { key: 'contactEmail', value: 'johnsmith@gmail.com' }, { key: 'contactPhone', value: '1234567890' }], order = { nameAndTitle: 1, contactPhone: 2, contactEmail: 3, address: 4, default: Infinity }; objs.sort(function (a, b) { return (order[a.key] || order.default) - (order[b.key] || order.default); }); console.log(objs);