我想迭代这个对象中的数组:
obj = {'2012-01-01':[1,2,5,8]}
我知道我们可以像这样迭代:
for(var i = 0;i < obj.length;i++){
obj['2012-08-08'][i]
}
但如果不知道密钥的名称我们如何迭代数组呢?
说我有一个循环:
_.each(dates, function(date){
//each date is like the above javascript object, how to iterate the array?
})
答案 0 :(得分:1)
使用_.keys
帮助程序:
var obj = {'2012-01-01':[1,2,5,8]};
_.each(_.keys(obj), function(date) {
console.log(date);
// 2012-01-01
console.log(obj[date]);
// [1,2,5,8]
});
答案 1 :(得分:1)
for(property in obj) {
if( Object.prototype.toString.call(property) === '[object Array]' ) {
//property is array
}
}
答案 2 :(得分:0)
如果你有两个对象数组并且想要“对齐”这些对象数组,那么你可以确保每个数组的对象与另一个数组的顺序一样,该怎么办?如果您不知道数组中的任何对象包含哪些键和值,那么该怎么办...更不用说它们的顺序是什么?
因此,您需要为[].filter
,[].map
等提供'WildCard Expression'。您如何获得外卡表达式?
var jux = (function(){
'use strict';
function wildExp(obj){
var keysCrude = Object.keys(obj),
keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '),
keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '),
keys = [].concat(keysA, keysB)
.sort(function(a, b){ return a.substring(1, a.length) > b.substring(1, b.length); });
var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a');
return exp;
}
return {
sort: wildExp
};
})();
var sortKeys = {
k: 'v',
key: 'val',
n: 'p',
name: 'param'
};
var objArray = [
{
k: 'z',
key: 'g',
n: 'a',
name: 'b'
},
{
k: 'y',
key: 'h',
n: 'b',
name: 't'
},
{
k: 'x',
key: 'o',
n: 'a',
name: 'c'
}
];
var exp = jux.sort(sortKeys);
console.log('@juxSort Expression:', exp);
console.log('@juxSort:', objArray.sort(function(a, b){
return eval(exp);
}));
您还可以在每个对象的迭代中使用此函数,为每个对象中的所有键创建更好的集合表达式,然后以这种方式过滤您的数组。
这是API Juxtapose中的一个小片段,我几乎完成了这个,它实现了这一点,对象与豁免,对象统一和数组压缩相等。如果这些是您需要或想要的项目,请发表评论,我会尽快使用lib。
希望这有帮助!快乐的编码:)