Как я могу разделить и массив на две части на основе типа Angular JS - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь разделить массив на 2 типа в зависимости от типа: Покупатель или Поставщик.Если вы посмотрите на последний фрагмент, есть массив newCompanies, в котором есть названия компаний с типом компании.

Я пытаюсь получить данные массива этой компании из локального хранилища и хочу разделить их на 2 массива, чтобы у меня было 2 типа списков.Одним из них является список покупателей, а другим - список поставщиков.

Заранее спасибо

var companies = JSON.parse(localStorage.getItem("newCompany"));

var splitted = companies.reduce(function(obj, item) {
  if (obj[item.type] == null) {
    obj[item.type] = [];
  }
  obj[item.type].push(item);
  return obj;
}, {});

splitted.buyer;
splitted.supplier;
$scope.companies.push(splitted.supplier);

$scope.companies.push(splitted.buyer);
<div class="form-group">
  <label class="control-label col-sm-2">Company</label>
  <div class="col-sm-10" ng-class="{ 'has-error' : addForm.addCompany.$invalid && !addForm.addCompany.$pristine }">
    <select class="form-control" name="addCompany"
            placeholder="Select Company"
            ng-options="company for company in companies"
            ng-model="newUser.company" ng-required="true">
    </select>
    <span class="help-block" ng-show="addForm.addCompany.$invalid && !addForm.addCompany.$pristine">
Your Company is required.
   </span>
  </div>
</div>
var newCompany = [{
    name: "Huawei", // -->COMPANY NAME
    email: "Drath@yahoo.com",
    phone: "123-123-1234",
    owner: "Drath",
    type: "buyer"
  },
  {
    name: "Asus", // -->COMPANY NAME
    email: "Vadar@yahoo.com",
    phone: "999-123-8888",
    owner: "Vadar",
    type: "supplier"
  },
  {
    name: "Acer", // -->COMPANY NAME
    email: "Radal@yahoo.com",
    phone: "676-989-8888",
    owner: "Randall",
    type: "supplier"
  }
];
window.localStorage.setItem("newCompany", JSON.stringify(newCompany));

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

var newCompany = [{
    name: "Huawei", // -->COMPANY NAME
    email: "Drath@yahoo.com",
    phone: "123-123-1234",
    owner: "Drath",
    type: "buyer"
  },
  {
    name: "Asus", // -->COMPANY NAME
    email: "Vadar@yahoo.com",
    phone: "999-123-8888",
    owner: "Vadar",
    type: "supplier"
  },
  {
    name: "Acer", // -->COMPANY NAME
    email: "Radal@yahoo.com",
    phone: "676-989-8888",
    owner: "Randall",
    type: "supplier"
  }
];

let buyers = [], suppliers = [];
for (let company of newCompany) {
  if (company.type === "buyer")
    buyers.push(company);
  else
    suppliers.push(company);
}

console.log("Buyers:");
console.log(buyers);
console.log("Suppliers:");
console.log(suppliers);
0 голосов
/ 22 ноября 2018

С уменьшением:

var companies = JSON.parse(window.localStorage.getItem('newCompany'));

var splitted = companies.reduce(function (obj, item) {
  if (obj[item.type] == null) { obj[item.type] = []; }
  obj[item.type].push(item);
  return obj;
}, {});

В результате splitted будет выглядеть следующим образом:

{
  buyer: [{name: "Huawei", ... }],
  supplier: [{name: "Asus", ... }, {name: "Acer", ... }]
}

И затем получит информацию из splitted:

splitted.buyer;    // -> [{name: "Huawei", ... }]
splitted.supplier; // -> [{name: "Asus", ... }, {name: "Acer", ... }]

Это дает дополнительное преимущество: если вы добавите третий «тип» компании позже, вам не придется менять ни одной строки кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...