Javascript 从JSON数组中删除字段

Javascript 从JSON数组中删除字段,javascript,arrays,json,Javascript,Arrays,Json,我有一个JSON数组: var arr = [ {ID: "1", Title: "T1", Name: "N1"}, {ID: "2", Title: "T2", Name: "N2"}, {ID: "3", Title: "T3", Name: "N3"} ] 如何在没有循环的情况下从所有行中删除标题键 结果应该如下所示: var arr = [ {ID: "1", Name: "N1"}, {ID: "2", Name: "N2"}, {ID: "3", Name: "N3"}

我有一个JSON数组:

var arr = [
{ID: "1", Title: "T1", Name: "N1"}, 
{ID: "2", Title: "T2", Name: "N2"}, 
{ID: "3", Title: "T3", Name: "N3"}
]
如何在没有循环的情况下从所有行中删除标题键

结果应该如下所示:

var arr = [
{ID: "1", Name: "N1"}, 
{ID: "2", Name: "N2"}, 
{ID: "3", Name: "N3"}
]
我尝试了以下方法:

delete arr.Title

但是它会产生一个逻辑响应“true”,而不是数组。

另一种选择是使用函数
map
创建一个具有所需输出的新数组。在处理程序内部,使用每个索引中的对象创建一个新对象,最后删除不需要的属性名
Title

假设您指的是数组,这种方法不会改变原始对象

让arr=[{ID:“1”,Title:“T1”,Name:“N1”},{ID:“2”,Title:“T2”,Name:“N2”},{ID:“3”,Title:“T3”,Name:“N3”}],
结果=arr.map(o=>{
设obj=Object.assign({},o);
删除对象标题;
返回obj;
});
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
您的变量
arr
不是数组。它是一个对象。
对象被大括号{}包围,如下所示:
{“name”:“Bob”,“alive”:true,“dead”:false}


数组被brakets[]包围,如下图所示:
[“Bob”、“Jane”、“Mary]

您希望在没有循环的情况下执行此操作。我不确定您的意思。如果您希望循环,我们当然可以编写不显式使用
for
的代码。但JS与大多数语言一样(也有APL和K等例外),不提供任何直接操作列表中所有元素的方法。因此,您可以使用
map
抽象循环。但仍可能存在一些循环

var-arr=[
{ID:“1”,标题:“T1”,名称:“N1”},
{ID:“2”,标题:“T2”,名称:“N2”},
{ID:“3”,标题:“T3”,名称:“N3”}
]
const newArr=arr.map(({Title,…rest})=>({…rest}))

console.log(newArr)
对于实际的JSON字符串,可以使用来筛选或修改值:

var json='[{“ID”:“1”,“Title”:“T1”,“Name”:“N1”},{“ID”:“2”,“Title”:“T2”,“Name”:“N2”},{“ID”:“3”,“Title”:“T3”,“Name”:“N3”}
var arr=JSON.parse(JSON,(k,v)=>k!=“Title”?v:k[-1]);
console.log(arr);
到目前为止您还没有:

[编辑]使用替代解决方案 结合 1) forEach/为…的。 2) delete/Reflect.deleteProperty

let
arr_1=[
{ID:1,标题:“T1”,名称:“N1”},
{ID:2,标题:“T2”,名称:“N2”},
{ID:3,标题:“T3”,名称:“N3”}
],
arr_2=arr_1.map(e=>Object.assign({},e))//新的副本数组
;
//解决方案1
arr_1.forEach(elm=>delete elm.Title)
//解决方案2
for(让arr_2的elm){Reflect.deleteProperty(elm,'Name')}//
log('arr_1=',JSON.stringify(arr_1))

console.log('arr_2=',JSON.stringify(arr_2))
您可以使用功能实用程序完成解决方案,这些实用程序使您能够以更简单的方式解决问题

import { map, omit } from 'lodash/fp';
const newArr = map(omit('Title'), arr);

这是一个错误的js对象,您指的是数组<代码>[]
?是的,数组[{},…]将编辑问题处理数组本质上是一项迭代任务。无论它是在for循环中显式的,还是在map或reduce操作中隐式的,这些都是迭代的,或者你称之为循环循环。为什么不需要使用某种迭代?除非这是纯学术性的,那就好了。还有一件事,JSON是对象的字符串表示形式。您拥有的是对象文本或对象文本数组。真正的结果没有多大帮助。
delete{}.abcdefg
也将返回true。我的答案不再适用。问题已被编辑。得到并更正-问题仍然相同,感谢各位的提醒。到目前为止,这似乎是正确的解决方案,您能否评估这是否需要最少的资源来运行?@HCMan:您正在尝试最小化哪些资源?为什么?我是在JIVE中工作并运行AJAX需要4/5秒,我不会增加响应时间。assign({},o)没有与IE一起工作,我尝试使用这个建议也没有成功:不确定为什么只有这个版本可以在JIVE html互动程序中工作?即使在这种情况下,我也必须在jQuery中重新编写:**var jQuery.each(arr,function)(elm,value){delete value.Title;});***其他建议仅适用于jsFiddle.forEach是ECMAScript 5 full JS解释器=>//我已更改代码以显示替代解决方案,只是为了指出我已澄清了代码,但我想知道它是否对JIVE有用?为什么不使用
map(省略('Title')
;)@IslamAttrash:很多库都包含
省略
函数,我个人使用的是Ramda函数,但是没有什么明显的理由在这里引入一个函数,除非你希望重用它。不鼓励只使用代码的答案。请单击并添加一些词,总结你的代码如何解决问题,或者解释你的答案如何不同来自上一个答案的注释。