簡體   English   中英

如何使用jquery刪除和編輯JSON數組中的值

[英]how to remove and edit the values in JSON Array using jquery

我這樣有一個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並用record2追加record1的“mobile”值,這樣。

這是預期的最終輸出。

[{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給出的答案#1 =

它與現有的按鍵IE工作正常,如果添加了以下輸入的新按鍵,

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"
        }]; 

它為所有新添加的鍵賦予“name”相同的值,如下所示,此處“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"
    }];

能否請你幫忙?

這是將輸入轉換為所需輸出的非常粗略的示例。

 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(",")
  });
}

編輯 :根據編輯修改答案:這是輸出對象:[{“id”:1,“name”:“Test”,“ssn”:1,“address”:“A”,“mobile”:“ 100200 “},{” ID “:2”,名稱為 “:” 溫度 “ ”SSN“:3 ”地址“: ”C“, ”移動“: ”300“},{ ”ID“:3”,命名 “:” 的Test2" , “SSN”:4 “地址”: “d”, “移動”: “400”},{ “ID”:4 “名稱”: “TEMP1”, “SSN”:5 , “地址”: “E”, “移動”: “500”}]

我用一個臨時對象來判斷一個鍵是否重復。 然后我將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));

你可以檢查這個小提琴的結果。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM