【问题标题】:how to remove and edit the values in JSON Array using jquery如何使用 jquery 删除和编辑 JSON 数组中的值
【发布时间】:2015-04-23 17:30:02
【问题描述】:

我这样有一个json数组,

var simple = [];

for (var i = 0; i < 5; i++) {
   simple.push({ id: id, name: name, mobile: mobile });
}

这个json数组的值如下,

[{id:1
  name:"Test"
  mobile:100},
{id:2
 name:"Test"
 mobile:200},
{id:3
 name:"Temp"
 mobile:300},
{id:4
 name:"Test"
 mobile:400},
{id:5
 name:"Temp"
 mobile:500}]

我需要做的是,我必须根据“名称”键比较 json 数组中的记录。

比较时,如果 record1.name = record2.name 则我必须删除整个 record1 并将 record1 的“移动”值附加到 record2 ,这样。

这是预期的最终输出。

[{id:1
  name:"Test"
  mobile:100,200,400},
{id:2
 name:"Temp"
 mobile:300,500}]

我试过用这种方式删除。但无法相互附加“移动”键值。

var removeItem = name;
alert('Array before removing the element = ' + simple);
simple = jQuery.grep(simple, 
                     function(value) { return value != removeItem; });
alert('Array before removing the element = ' + simple);

有人可以帮我吗?

谢谢

编辑 ======

我尝试了下面给出的 Ismail Kuruca 给出的 Answer#1=,

它可以与现有的键 I.E 正常工作,如果使用以下输入添加新键,

var input = 
        [{
          id:1,
          name:"Test",
          ssn:1,
          mobile:100,
          address:"A"
        },
        {
         id:2,
         name:"Test1",
         ssn:2,
         mobile:200,
         address:"B"
        },
        {
         id:3,
         name:"Temp",
         ssn:3,
         mobile:300,
         address:"C"
        },
        {
         id:4,
         name:"Test2",
         ssn:4,
         mobile:400,
         address:"D"
        },
        {
         id:5,
         name:"Temp1",
         ssn:5,
         mobile:500,
         address:"E"
        }]; 

它为所有新添加的键赋予相同的“名称”值,如下所示, 这里“ssn”应该等于1,但它返回“name”值:“test”

[{"id":1,"name":"Test","ssn":"Test","mobile":"100"},{"id":2,"name":"Test1","ssn":"Test1","mobile":"200"},{"id":3,"name":"Temp","ssn":"Temp","mobile":"300"},{"id":4,"name":"Test2","ssn":"Test2","mobile":"400"},{"id":5,"name":"Temp1","ssn":"Temp1","mobile":"500"}]

我试过这样,

//This part transforms your input to a map for each "name" attribute
        //Each key has a value of array of "mobile" 
        var intermediateObject = {};
        for(var i = 0; i < input.length; i++) { 
          if(typeof intermediateObject[input[i].name] == 'undefined') {
            intermediateObject[input[i].name] = [];
          }
          else if(typeof intermediateObject[input[i].ssn] == 'undefined') {
                intermediateObject[input[i].ssn] = [];
          }
          intermediateObject[input[i].name].push(input[i].mobile);
          intermediateObject[input[i].ssn].push(input[i].mobile); 
        }
        //Here the intermediate transformation is re-adjusted to look like your 
        //intended output format
        var outputObject = [];
        var index = 1;
        for(elem in intermediateObject ) {
          outputObject.push({
            id: index++,
            name: elem,
            ssn : elem,
            mobile: intermediateObject[elem].join(",")
          });
        }
        console.log(JSON.stringify(outputObject));

但它不工作.. 可以帮助我吗..

    Output should be,

    [{
      id:1,
      name:"Test",
      ssn:1,
      mobile:100,
      address:"A"
    },
    {
     id:2,
     name:"Test1",
     ssn:2,
     mobile:200,
     address:"B"
    },
    {
     id:3,
     name:"Temp",
     ssn:3,
     mobile:300,
     address:"C"
    },
    {
     id:4,
     name:"Test2",
     ssn:4,
     mobile:400,
     address:"D"
    },
    {
     id:5,
     name:"Temp1",
     ssn:5,
     mobile:500,
     address:"E"
    }];

你能帮忙吗?

【问题讨论】:

  • 名称可以有除“Test”或“Temp”以外的其他值吗?

标签: javascript jquery arrays json


【解决方案1】:

这是一个将输入转换为所需输出的非常粗略的示例。

 var input = 
[{
      id:1,
      name:"Test",
      ssn:1,
      mobile:100,
      address:"A"
    },
    {
     id:2,
     name:"Test",
     ssn:1,
     mobile:200,
     address:"A"
    },
    {
     id:3,
     name:"Temp",
     ssn:3,
     mobile:300,
     address:"C"
    },
    {
     id:4,
     name:"Test2",
     ssn:4,
     mobile:400,
     address:"D"
    },
    {
     id:5,
     name:"Temp1",
     ssn:5,
     mobile:500,
     address:"E"
    }]; 

//This part transforms your input to a map for each "name" attribute
//Each key has a value of array of "mobile" 
var intermediateObject = {};
for(var i = 0; i < input.length; i++) { 
  if(typeof intermediateObject[input[i].name] == 'undefined') {
    intermediateObject[input[i].name] = { ssn: null, address: null, content:[]};
  }
  intermediateObject[input[i].name].content.push(input[i].mobile); 
  intermediateObject[input[i].name].ssn = input[i].ssn; 
  intermediateObject[input[i].name].address= input[i].address; 
}


//Here the intermediate transformation is re-adjusted to look like your 
//intended output format
var outputObject = [];
var index = 1;

for(elem in intermediateObject ) {
  outputObject.push({
    id: index++,
    name: elem,
    ssn: intermediateObject[elem].ssn,
    address: intermediateObject[elem].address,
    mobile: intermediateObject[elem].content.join(",")
  });
}

EDIT:根据编辑修改答案: 这是输出对象: [{"id":1,"name":"Test","ssn":1,"address":"A","mobile":"100,200"},{"id":2,"name": "Temp","ssn":3,"address":"C","mobile":"300"},{"id":3,"name":"Test2","ssn":4,"address ":"D","mobile":"400"},{"id":4,"name":"Temp1","ssn":5,"address":"E","mobile":"500 "}]

【讨论】:

  • 您还想合并其他字段吗?当两个具有相同“名称”的对象具有不同的“ssn”或“地址”时会发生什么
  • 您好,我已经编辑了我的答案以满足您的新要求。如果答案适合您的应用程序,您能否将其标记为答案?谢谢,
【解决方案2】:

我使用了一个临时对象来确定一个键是否重复。然后我应用reduce来存储具有非重复键的对象,并使用重复元素的移动更新它们拥有的移动数组。

function final(arr) {
    var aux = {}, index = 0;
    return arr.reduce(function (memo, el) {
        var key = el.name,
            obj = aux[key];
        if (!obj) {
            aux[key] = {
                id: index++,
                name: key,
                mobile: el.mobile
            };
            memo = memo.concat(aux[key]);
        } else {
            obj.mobile += "," + el.mobile;
        }
        return memo;
    }, []);
}

console.log(final(arr));

您可以在fiddle 中查看结果。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2013-02-28
    • 1970-01-01
    • 2023-03-08
    • 2023-03-13
    • 2019-09-27
    • 2011-04-05
    相关资源
    最近更新 更多