在对象数组上使用map时得到奇怪的输出,该如何解决?

问题描述

我正在从对象数组中过滤空值,但没有收到干净的数组作为输出

//returns,cat,snake,dog,snake
//var input1 = [{"dog":"35","cat":"21","girrafe":"33","snake":"44"},{"dog":"22","cat":"","girrafe":"2","snake":""},{"dog":"","girrafe":"88","snake":""}];

//returns ",girrafe,snake"
//var input1 = [{"dog":"43","cat":"32","girrafe":"1","snake":"33"},{"dog":"1","cat":"23","snake":"23"},"cat":"5","girrafe":"","snake":""}];

//returns dog,snake
//var input1 = [{"dog":"","cat":"s","snake":"54"},{"dog":"x","cat":"y","girrafe":"45","snake":"x"},"snake":""}];

//tried to fix with .join() but then

//returns doggirrafecat,girrafe if I uses console.log(input1.join())
var input1 = [{"dog":"",{"dog":"s","snake":"ss"}];


//returns typeof object
var emptyKeys = input1.map(function (object) {
    return Object.keys(object).filter(function (key) {
        return object[key] === '';
    });
});

console.log(emptyKeys)

所以我的目标是获取对象数组中的空值并获取其键。我在这里做错什么,如何解决它,以便所有输入都能正确返回?

解决方法

平移数组可以解决它,

var flatArray = Array.prototype.concat.apply([],input1);

谢谢你的建议!

,
var emptyKeys = input1.map(function (object) {
    return Object.keys(object).filter(function (key) {
        return object[key] === '';
    });
}).filter(function(item){
 return item.length !== 0;
});

这是你的意思吗?

,
input1.reduce(function(accumulator,currentValue){
    accumulator.push(...Object.entries(currentValue).filter((kvPair) => kvPair[1] === '').map(ele => ele[0]));
    return accumulator;
},[])