从对象中删除元素-javascript

时间:2018-11-29 16:30:42

标签: javascript

如果我有一个对象数组,例如

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')

但是必须有一种更简单的清洁方式

4 个答案:

答案 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(); 数组,使用destructuringshorthand property names在那里:

map

示例:

const result = arrOfObj.map(({a, b}) => ({a, b}));

答案 1 :(得分:2)

解构语法对此非常有效,如您在其他答案中所见。但是,它在程序级别需要ab。如果ab在数据级别(例如,作为数组中的值)存在,则程序将稍有不同

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);

**编辑了上面的内容,以使其与请求保持更多内联。