[英]How to sort array as per key value using Angular.js/Javascript
[英]Sort two array value and merge as per date using Angular.js/JavaScript
我有兩個json數組,並且兩個數組都有date
字段值。 在這里,我需要比較兩個數組並合並為一個數組。 我的代碼如下:
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'}];
var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}];
在這里,我有兩個數組,我需要按日期比較兩個數組,並將兩個值合並到一個數組中。 預期輸出如下。
var finalArr=[{'name':'Ram','date':'2017-12-06','model':'mmm'},{'name':'Raja','date':'2017-12-07','model':''},{'name':'Rahul','date':'2017-12-08','model':''},{'name':'','date':'2017-12-09','model':'rrr'}]
我的預期輸出如上。 我正在嘗試如下。
angular.forEach(firstArr,function(obj1){
angular.forEach(secondArr.task,function(obj2){
if (new Date(obj1.date)=== new Date(obj2.date)) {
}
})
})
但是像這樣,我對兩個數組的長度有點困惑,因為它可能/可能不相同。
我專注於JS部分,而不是角度版本。
Onject.assign
合並對象。 如果不能,則甚至可以使用for..in
循環或僅使用2個循環並手動設置特定屬性。 樣品:
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'}]; var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}]; var hashMap = {}; [firstArr, secondArr].forEach(function(arr) { arr.forEach(function(obj) { hashMap[obj.date] = Object.assign(Object.create(null), hashMap[obj.date] || {}, obj); }) }); var result = Object.keys(hashMap).map(x=> hashMap[x]); console.log(result)
您可以使用array#reduce
獲取具有相同日期的合並對象。 在array#reduce
內部,合並具有相同日期的對象,然后使用Object.values()
獲得所有值。
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'}], secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}]; var result = firstArr.concat(secondArr).reduce((r, o) => { r[o.date] = Object.assign({}, r[o.date] || {name:'', model: ''}, o); return r; },{}); var output = Object.values(result); console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
嘗試這個
var finelArr = []
angular.forEach(firstArr, function(val) {
angular.forEach(secondArr, function(item) {
if (val.date === item.date) {
finelArr.push({ name: val.name, date: val.date, model: item.model })
}
})
})
嘗試這個。 如果您不想修改原始陣列,則必須事先對其進行深度克隆。 與愛迪生的解決方案相反,這還將包括第二個數組中的項目。
var firstArr=[{'name':'Ram','date':'2017-12-06'},{'name':'Raja','date':'2017-12-07'},{'name':'Rahul','date':'2017-12-08'}]; var secondArr=[{'model':'mmm','date':'2017-12-06'},{'model':'rrr','date':'2017-12-09'}]; const newArr = (arr1, arr2) => { const finalArr = arr1.map((firstElement) => { firstElement.model = ""; arr2.forEach((secondElement, index) => { if (secondElement.date === firstElement.date) { firstElement.model = secondElement.model; arr2.splice(index, 1); } }); return firstElement; }); arr2.forEach((element) => { element.name = ""; finalArr.push(element); }); return finalArr; }; console.log(newArr(firstArr, secondArr));
Angular是具有大型庫的龐大框架,但在開始在視圖中使用正確的語法之前只需要它。
該示例無需在控制器中進行編碼即可工作:
var app = angular.module("app", []); app.controller("ctrlA", function($scope) { var firstArr = [{ 'name': 'Ram', 'date': '2017-12-06' }, { 'name': 'Raja', 'date': '2017-12-07' }, { 'name': 'Rahul', 'date': '2017-12-08' }]; var secondArr = [{ 'model': 'mmm', 'date': '2017-12-06' }, { 'model': 'rrr', 'date': '2017-12-09' }]; $scope.ul = firstArr.concat(secondArr); })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="ctrlA"> <ul> <li ng-repeat="li in ul | orderBy:'date'"> {{li.name ? li.name : li.model}} - {{li.date}} </li> </ul> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.