如果我有一个对象数组,例如
const arrOfObj = [
{
'a': 'a',
'b': 'b',
'c': 'c',
'd': 'd'
}
]
如何使用只有a和b的对象创建新数组?
{
'a': 'a',
'b': 'b'
}
我一直在尝试类似的东西
Object.entries(arrOfObjs[0]).filter(x => x[0] !== 'a' && x[0] !== 'b')
但是必须有一种更简单的清洁方式
答案 0 :(得分:4)
您可以 string strCmdText = "\"C:/Program Files/7-zip/7z.exe\" e \"" + listBox1.Items[i].ToString() + "\" -o\"" + label1.Text + "\" EMM*.zip RFE*.zip -r -y";
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
cmd.StandardInput.WriteLine(strCmdText);
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
数组,使用destructuring和shorthand property names在那里:
map
示例:
const result = arrOfObj.map(({a, b}) => ({a, b}));
答案 1 :(得分:2)
解构语法对此非常有效,如您在其他答案中所见。但是,它在程序级别需要a
和b
。如果a
和b
在数据级别(例如,作为数组中的值)存在,则程序将稍有不同
const pick = (o = {}, keys = []) =>
keys .reduce
( (acc, k) => Object .assign (acc, { [k]: o[k] })
, {}
)
const print = (...values) =>
values .forEach (x => console .log (x))
const data =
{ a: 1, b: 2, c: 3 }
print
( pick (data, [ 'a', 'b' ]) // { a: 1, b: 2 }
, pick (data, [ 'c', 'd' ]) // { c: 3, d: undefined }
, pick (data, []) // {}
, data // { a: 1, b: 2, c: 3 }
)
如您所见,data
并未因使用pick
而突变。
答案 2 :(得分:1)
您的标题表明您想要删除特定的属性,但文本表明您实际上想要保留特定的属性。如果是后者,我建议是易卜拉欣·马尔里尔(ibrahim mahrir)的解决方案,或者是user633183的解决方案。
但是如果是前者,这是一种类似于user633183的方法,但是它会创建一个克隆而没有给定属性:
const omit = (keys = []) => (o = {}) =>
Object .keys (o) .reduce
( (acc, k) => keys .includes (k)
? acc
: Object .assign (acc, { [k]: o[k] })
, {}
)
const print = (...values) =>
values .forEach (x => console .log (x))
const data =
{ a: 1, b: 2, c: 3, d: 4 }
print
( omit ([ 'c', 'd' ]) (data) // { a: 1, b: 2 }
, omit ([ 'b' ]) (data) // { a: 1, c: 3, d: 4 }
, omit ([ ]) (data) // { a: 1, b: 2, c: 3, d: 4 }
, data // { a: 1, b: 2, c: 3, d: 4 }
)
答案 3 :(得分:0)
您可以从对象中删除属性。
const arrOfObj = [
{
'a': 'a',
'b': 'b',
'c': 'c',
'd': 'd'
}
];
console.log(arrOfObj.reduce((acc, val) => {
let v = Object.assign({}, val);
Object.keys(v).forEach(i => {
if (i !== 'a' && i !== 'b') {
delete v[i];
}
});
acc.push(v);
return acc;
}, []));
console.log(arrOfObj);
**编辑了上面的内容,以使其与请求保持更多内联。