Javascript按键拆分对象

时间:2016-05-19 02:06:18

标签: javascript angular

让我们说我有一个对象:

   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。

3 个答案:

答案 0 :(得分:1)

<强> PLUNKER DEMO

根据我所知道并从你的问题中理解,

ControlGroupObject,其他人也注意到属性don't have a specific order,即使您知道它属于它,也不能依赖它alphabetical order

我假设您使用controlGroups编写formBuilder或使用循环生成。

  • 如果您已经拥有controlGroups的数组,只需将它们保存在数组中,如

cgs = ['controlGroup1', 'controlGroup2', 'controlGroup3'] 

按照您将它们放入template的确切顺序。现在你知道你在找什么了。

  • 如果你没有,
    • 您可以创建数组
    • 如果你不能只是遍历DOM

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

使用此方法,您至少只循环遍历对象中的最后两个键。