让我们说我有一个对象:
var obj = {
name:'Jone',
age:'23',
height:200,
weight:400,
}
我想要这个:
var obj1 = {
name:'Jone',
age:'23'
}
var obj2 = {
height:200,
weight:400
}
我真正想要的是obj.splice('age')
,意味着将此对象拆分为两个对象,从age
开始作为关键字。
我知道我可以循环并以艰难的方式去做,但有没有相同的简单好方法?
另外,如果有任何Angular2ish方式(隐藏的实用程序可能?),那就更好了。
编辑: 我不知道对象里面有什么,我只知道我的钥匙就在那里。
我真正在做的是我想循环一个对象,但我有一个起点,我不想遍历所有,我希望能够切割该对象并启动循环从我需要的地方。
Object.keys(obj).map( function( value , index ) {
// I'm just looping here to do some stuff , which is not related to the question here.
} );
显然,我循环遍历此对象的所有键,但我想从age
开始。
我希望这很清楚。
编辑; 我知道这有点偏离了主板,但在Angular2中,我们有一个formModel,我们可以在其中有多个controlGroup,我希望基本上能够找到第一个无效的controlGroup,&# 39; s。
答案 0 :(得分:1)
<强> PLUNKER DEMO
强>
根据我所知道并从你的问题中理解,
ControlGroup
是Object
,其他人也注意到属性don't have a specific order
,即使您知道它属于它,也不能依赖它alphabetical order
。
我假设您使用controlGroups
编写formBuilder
或使用循环生成。
controlGroups
的数组,只需将它们保存在数组中,如
cgs = ['controlGroup1', 'controlGroup2', 'controlGroup3']
按照您将它们放入template
的确切顺序。现在你知道你在找什么了。
let domList = document.querySelectorAll('*[ngControlGroup]');
let cgEls = Array.apply(null, domList);
var cgs = []; // will store the ordered list of controlGroups
cgEls.forEach((e) => {
cgs.push(e.attributes.ngControlGroup.value);
})
现在您知道订单,逐一检查其有效性。
希望它有所帮助。
答案 1 :(得分:0)
你可以这样做:
var obj = {
name: 'Jone',
age: '23',
height: 200,
weight: 400,
}
var obj1 = {}
var obj2 = {}
function splitAtAge(input) {
var afterAge = 0;
for (var i in input) {
if (afterAge) {
obj2[i] = input[i];
} else {
obj1[i] = input[i];
}
if (i == "age") {
afterAge = true;
}
}
}
splitAtAge(obj);
它遍历对象,如果属性在&#34; age&#34;之后,则将其添加到obj2。否则,它将它添加到obj1。
对我来说似乎每次都有效,但如果我是你,我会完全避免这样做,因为对象的属性并不意味着订单。
编辑:我刚刚意识到你正在使用Angular,我并不熟悉它。但是,这个纯JS代码仍然可以工作。答案 2 :(得分:0)
我知道你正在寻找一个很好的,简单的解决方案,但是创建一个新的对象而不用映射键来获取值是非常困难的。如果您打开使用某些ES6语法,则以下解决方案可能适合您。
$ ./bin/titleartist <../dat/titleartist.txt
3:40 First Artist I Like First Title I Like
4:27 Fifth Artist is Good Fifth Title is Good
使用此方法,您至少只循环遍历对象中的最后两个键。