2015-10-13 6 views
1

У меня есть JSON, как это ..Как получить определенные уникальные значения из JSON в angularjs

{ 
"Project_details": [ 
    { 
     "Project_ID": "1245353445", 
     "Name": "Test1", 
     "Releases": [ 
      { 
       "sid_ratio": "5.0", 
       "release_version": "13.2", 
       "pre_delivery": { 
        "total": "13", 
        "blocker": "2", 
        "critical": "2", 
        "major": "4", 
        "normal": "6", 
        "minor": "1" 
       }, 
       "post_delivery": { 
        "total": "3", 
        "blocker": "2", 
        "critical": "0", 
        "major": "1", 
        "normal": "1", 
        "minor": "1" 
       } 
      }, 
      { 
       "sid_ratio": "15.0", 
       "release_version": "14.1", 
       "pre_delivery": { 
        "total": "13", 
        "blocker": "3", 
        "critical": "2", 
        "major": "4", 
        "normal": "6", 
        "minor": "1" 
       }, 
       "post_delivery": { 
        "total": "3", 
        "blocker": "3", 
        "critical": "0", 
        "major": "1", 
        "normal": "1", 
        "minor": "1" 
       } 
      }, 
      { 
       "sid_ratio": "15.0", 
       "release_version": "14.2", 
       "pre_delivery": { 
        "total": "13", 
        "blocker": "0", 
        "critical": "2", 
        "major": "4", 
        "normal": "6", 
        "minor": "1" 
       }, 
       "post_delivery": { 
        "total": "3", 
        "blocker": "0", 
        "critical": "0", 
        "major": "1", 
        "normal": "1", 
        "minor": "1" 
       } 
      } 
     ] 
    } 
] 
} 

Я хочу, чтобы получить уникальный release_version в одном массиве ..

И мне нужны ключи " Project ID "и" Name "в другом массиве.

Как это можно использовать с помощью угловых? эти данные я хочу получить в контроллере и назначить эти массивы в $ scope.

+0

Это на самом деле не Угловая родственный хотя. То, что вы хотите, - это перебрать массив и искать в нем что-то. Вы что-то пробовали? Отправьте код, с которым вы столкнулись. – Artless

ответ

2

Ничего особенного для углового. Окончательный код (сырец Javascript):

var x = { 
    "Project_details": [ 
     { 
      "Project_ID": "1245353445", 
      "Name": "Test1", 
      "Releases": [ 
       { 
        "sid_ratio": "5.0", 
        "release_version": "13.2", 
        "pre_delivery": { 
         "total": "13", 
         "blocker": "2", 
         "critical": "2", 
         "major": "4", 
         "normal": "6", 
         "minor": "1" 
        }, 
        "post_delivery": { 
         "total": "3", 
         "blocker": "2", 
         "critical": "0", 
         "major": "1", 
         "normal": "1", 
         "minor": "1" 
        } 
       }, 
       { 
        "sid_ratio": "15.0", 
        "release_version": "14.1", 
        "pre_delivery": { 
         "total": "13", 
         "blocker": "3", 
         "critical": "2", 
         "major": "4", 
         "normal": "6", 
         "minor": "1" 
        }, 
        "post_delivery": { 
         "total": "3", 
         "blocker": "3", 
         "critical": "0", 
         "major": "1", 
         "normal": "1", 
         "minor": "1" 
        } 
       }, 
       { 
        "sid_ratio": "15.0", 
        "release_version": "14.2", 
        "pre_delivery": { 
         "total": "13", 
         "blocker": "0", 
         "critical": "2", 
         "major": "4", 
         "normal": "6", 
         "minor": "1" 
        }, 
        "post_delivery": { 
         "total": "3", 
         "blocker": "0", 
         "critical": "0", 
         "major": "1", 
         "normal": "1", 
         "minor": "1" 
        } 
       } 
      ] 
     } 
    ] 
}; 
var y = createMap(selectMany(x.Project_details.map(function (x) { return x.Releases; })).map(function (x) { return x.release_version; })); 
console.log(Object.keys(y)); // "13.2" "14.1" "14.2" 
function selectMany(arr) { 
    var result = []; 
    for (var i = 0; i < arr.length; i++) { 
     for (var j = 0; j < arr[i].length; j++) { 
      result.push(arr[i][j]); 
     } 
    } 
    return result; 
} 
function createMap(arr) { 
    return arr.reduce(function (result, key) { 
     result[key] = true; 
     return result; 
    }, {}); 
} 

Вы в основном нужно функций selectMany и createMap.

Больше

Я на самом деле написал в машинописном, его больше удовольствия видеть преобразования типа (но, вероятно, более сложным для начинающих):

let x = { 
"Project_details": [ 
    { 
     "Project_ID": "1245353445", 
     "Name": "Test1", 
     "Releases": [ 
      { 
       "sid_ratio": "5.0", 
       "release_version": "13.2", 
       "pre_delivery": { 
        "total": "13", 
        "blocker": "2", 
        "critical": "2", 
        "major": "4", 
        "normal": "6", 
        "minor": "1" 
       }, 
       "post_delivery": { 
        "total": "3", 
        "blocker": "2", 
        "critical": "0", 
        "major": "1", 
        "normal": "1", 
        "minor": "1" 
       } 
      }, 
      { 
       "sid_ratio": "15.0", 
       "release_version": "14.1", 
       "pre_delivery": { 
        "total": "13", 
        "blocker": "3", 
        "critical": "2", 
        "major": "4", 
        "normal": "6", 
        "minor": "1" 
       }, 
       "post_delivery": { 
        "total": "3", 
        "blocker": "3", 
        "critical": "0", 
        "major": "1", 
        "normal": "1", 
        "minor": "1" 
       } 
      }, 
      { 
       "sid_ratio": "15.0", 
       "release_version": "14.2", 
       "pre_delivery": { 
        "total": "13", 
        "blocker": "0", 
        "critical": "2", 
        "major": "4", 
        "normal": "6", 
        "minor": "1" 
       }, 
       "post_delivery": { 
        "total": "3", 
        "blocker": "0", 
        "critical": "0", 
        "major": "1", 
        "normal": "1", 
        "minor": "1" 
       } 
      } 
     ] 
    } 
] 
} 



let y = createMap(selectMany(x.Project_details.map(x=>x.Releases)).map(x=>x.release_version)); 
console.log(Object.keys(y));// "13.2" "14.1" "14.2" 


function selectMany<T>(arr: T[][]): T[] { 
    var result = []; 
    for (var i = 0; i < arr.length; i++) { 
     for (var j = 0; j < arr[i].length; j++) { 
      result.push(arr[i][j]); 
     } 
    } 
    return result; 
} 

function createMap(arr: string[]): { [string: string]: boolean } { 
    return arr.reduce((result: { [string: string]: boolean }, key: string) => { 
     result[key] = true; 
     return result; 
    }, <{ [string: string]: boolean }>{}); 
} 
+0

Его отлично работает спасибо :) – jaylani

2

Я знаю, что вопрос был принят. И я люблю чистый javascript. Но я не могу удержаться от предоставления элегантного решения с использованием LoDash.

Как я правильно понял, вам нужен два разных массива.

Экстракт release_version в массиве

_.pluck(data['Project_details'][0]['Releases'], 'release_version'); 
// ["13.2", "14.1", "14.2"] 

Extract PROJECT_ID и Имя

_.pick(data['Project_details'][0], ['Project_ID', 'Name']) 
// Object {Project_ID: "1245353445", Name: "Test1"} 

Индекс 0 используется причина там только одна строка в массиве Project_details.

+1

Спасибо за ваш ответ. Я просто попробовал это, его работа отлично. – jaylani

0

Легкий способ получить особое уникальное значение из Json с помощью angular.forEach

var notificationcontent = [{"type":"success","title":"title","body":"Your deadline to open an Term deposit and save thousands in taxes is june 20th!","timeout":"0","bodyOutputType":"trustedHtml","clickHandler":""}, 

{"type":"error","title":"title","body":"This month, Your spent Rs.500.05 on restaurants. This exceeds your budget of Rs.300 by Rs.200.","timeout":"0","bodyOutputType":"trustedHtml","clickHandler":""}, 

{"type":"warning","title":"title","body":"This month, Your spent Rs.500.05 on Gas and Fuel. This exceeds your budget of Rs.800 by Rs.200.","timeout":"0","bodyOutputType":"trustedHtml","clickHandler":""}]; 

angular.forEach (notificationcontent, function(value, key) {alert(value.type);console.log(value.body);}); 
Смежные вопросы