Javascript 构建具有两个键/值对的对象数组
我必须构建这样的阵列:Javascript 构建具有两个键/值对的对象数组,javascript,jquery,Javascript,Jquery,我必须构建这样的阵列: [{'test1': 't1', 'test2' :'t2'}, {'test3' :'t3', 'test4': 't4' }, {'test5': 't5', 'test6' :'t6'}, {'test7' :'t7' , 'test8': 't7' }] 它将是一个对象数组 对象将始终具有两个键/值对。 键和值将是动态的 我必须循环通过下面的对象来构建阵列: 最后,我必须用数组构建一个表,如下所示: 它必须是一个包含键和值的2列表 HTML:
[{'test1': 't1', 'test2' :'t2'},
{'test3' :'t3', 'test4': 't4' },
{'test5': 't5', 'test6' :'t6'},
{'test7' :'t7' , 'test8': 't7' }]
它将是一个对象数组
对象将始终具有两个键/值对。
键和值将是动态的
我必须循环通过下面的对象来构建阵列:
最后,我必须用数组构建一个表,如下所示:
它必须是一个包含键和值的2列表
HTML:
测试1
t1
测试2
t2
测试3
t3
测试4
t4
测试5
t5
测试6
t6
测试7
t7
测试8
t7
你知道怎么做吗?多么疯狂的要求。我喜欢。这是我的看法。(没有测试)
下面是我创建该表的方法:
var testObject={
一些关键点:{
键1:'1',
键2:'2',
键3:'3',
}
};
var元素=[];
var last=null;
//在相关对象中的关键点上循环
$.each(testObject.some_键,函数(键,值){
变量项=“”+键+“”+值+“”;
如果(!last){//如果没有最后一项,则将此行设置为last not add to the array of elements,我们首先需要其他两列
最后一项=项目;
}否则{
//如果我们已经有了一个last,那么将这两列添加到它,然后将它添加到元素数组中
元素。推送(最后一个+项目);
last=null;
}
});
如果(最后){
//最后,如果仍然有一个“last”挂起,则添加两个空列
var项目=“”;
元素。推送(最后一个+项目);
}
//使用tr连接环绕每组4列的数组
变量行=''+元素。连接('')+'';
$('.detailList tbody').html(行)代码>
键名和值来自何处?您通常使用相同的键,只是使用不同的对象。我已更新了问题。键/值来自对象。我循环通过它来构建数组。这里我主要关心的是如何将数组中每个对象的键/值对限制为两个。请帮助。好的,那么实际的需求是将一个具有多个属性的对象作为输入,并在一个每行有两个键/值对的HTML表中显示这些属性吗?是否需要有您最初询问的两个属性对象的数组,或者这正是您认为获得最终输出HTML所需的吗?Bruh,只要遍历键并在列数为4时生成新行即可。这样,您就不会操纵实际的数据。这是一个疯狂的需求,因为OP几乎肯定以错误的方式使用对象和数组。这是我们真正需要解决的问题,我同意。什么样的设计需要一个关键限制为两个的对象数组。如果有这样的设计需要这样做,它需要重新设计。谢谢。得到了我想要的数组。@N.B.棘手的一点是在元素上循环,以便在结果表的每一行上使用两个单独的键和值。;)是 啊谢谢你的帮助。我会试试的。谢谢,试过了。很好!谢谢@bleeted0d。也谢谢你,维克。@维克,跟我说话吗?@N.B.我想维克只是厚颜无耻,他说“好吧,当然,如果你想解决真正的问题”;)
<table class="detailList" >
<tbody>
<tr></tr>
<tr>
<th class="labelCol" scope="row"> <label>test1</label> </th>
<td class="dataCol"> t1</td>
<th class="labelCol" scope="row"> <label>test2</label> </th>
<td class="dataCol"> t2</td>
</tr>
<tr>
<th class="labelCol" scope="row"> <label>test3</label> </th>
<td class="dataCol"> t3</td>
<th class="labelCol" scope="row"> <label>test4</label> </th>
<td class="dataCol"> t4</td>
</tr>
<tr>
<th class="labelCol" scope="row"> <label>test5</label> </th>
<td class="dataCol"> t5</td>
<th class="labelCol" scope="row"> <label>test6</label> </th>
<td class="dataCol"> t6</td>
</tr>
<tr>
<th class="labelCol" scope="row"> <label>test7</label> </th>
<td class="dataCol"> t7</td>
<th class="labelCol" scope="row"> <label>test8</label> </th>
<td class="dataCol"> t7</td>
</tr>
</tbody>
</table>
var twoPairArray = []; //array to be returned
var twoPairObj = {}; //temp obj for manipulation
for(var key in targetObj) //target obj has the keys to be processed
{
if(Object.keys(twoPairObj).length == 2) //does temp obj have enough keys?
{
twoPairArray.push(JSON.parse(JSON.stringify(twoPairObj))); //sloppy clone of temp obj
twoPairObj = {}; //reset the temp obj.
}
twoPairObj[key] = targetObj[key]; //temp obj being manipulated into this craziness
}