Javascript:添加除数组中的元素以外的所有元素
我有一个列索引数组,看起来像[2,4,5],还有一个字符串值键从“0”到“6”的对象 我想创建一个新数组,其中包含原始对象中的所有元素,但键与列索引数组中的任何值匹配的元素除外。我目前就是这样做的,但我对此不满意:Javascript:添加除数组中的元素以外的所有元素,javascript,arrays,maps,Javascript,Arrays,Maps,我有一个列索引数组,看起来像[2,4,5],还有一个字符串值键从“0”到“6”的对象 我想创建一个新数组,其中包含原始对象中的所有元素,但键与列索引数组中的任何值匹配的元素除外。我目前就是这样做的,但我对此不满意: const convertObjectToArray = (columnIndexes, rowObject) => { return Object.keys(rowObject).map(key => { let rowValue = '';
const convertObjectToArray = (columnIndexes, rowObject) => {
return Object.keys(rowObject).map(key => {
let rowValue = '';
if (columnIndexes.indexOf(parseInt(key)) === -1) {
rowValue = rowObject['' + key];
}
return rowValue;
});
};
也许有一个非常简单,直接的方法来做这件事,我只是错过了它
const convertObjectToArray = (columnIndexes, rowObject) =>
Object.keys(rowObject)
.filter( key => columnIndexes.includes(+key))
.map(key => rowObject[key])
或者,如果确实需要空字符串:
const convertObjectToArray = (columnIndexes, rowObject) =>
Object.entries(rowObject)
.map(([key, value]) =>
columnIndexes.includes(+key)
?value
:""
);
这里有一个非常接近您使用的解决方案:
const convertObjectToArray = (columnIndexes, rowObject) => {
return Object.keys(rowObject).map(key => {
let rowValue = '';
if (columnIndexes.indexOf(key) === -1) {
rowValue = rowObject[key];
}
return rowValue;
});
};
一种简单的方法是重新组织代码,在
行对象上循环时直接构建结果数组
:
function convertObjectToArray(columnIndexes, rowObject) {
let res = [];
for(let key in rowObject)
if(columnIndexes.indexOf(+key) < 0)
res.push(rowObject[key]);
return res;
}
函数convertObjectToArray(columnIndexes,rowObject){
设res=[];
for(让输入行对象)
if(columnIndexes.indexOf(+key)<0)
res.push(rowObject[key]);
返回res;
}
在下面的代码段中使用演示代码:
let excludeColumns=[2,4,5];
让rowObject={
“0”:“值0”,
“1”:“值1”,
“2”:“值2”,
“3”:“值3”,
“4”:“值4”,
“5”:“值5”,
“6”:“值6”
};
console.log(
convertObjectToArray(不包括列、行对象)
);
函数convertObjectToArray(columnIndexes,rowObject){
设res=[];
for(让输入行对象)
if(columnIndexes.indexOf(+key)<0)
res.push(rowObject[key]);
返回res;
}
你能给出一个输入和输出示例吗?Object.keys(obj).filter(k=>columnIndexes.indexOf(parseInt(k))>=0.map(k=>obj[k])
请注意,你目前的方法在技术上没有过滤掉其他元素;它用空字符串代替它们(这可能是你想要的,也可能不是你想要的)。@辛芬德尔:是的,捕捉得好,这是一个重要的观点。我返回的数组中的元素数应该与原始对象相同。在这种情况下,您的解决方案已经相当简洁了。正如其他人所指出的,您可以用三元表达式替换单个if
:返回columnIndexes.indexOf(parseInt(k))>=0?“”:obj[k]
。