Как получить строку из массива, используя Angularjs или JavaScript - PullRequest
0 голосов
/ 30 октября 2018
var array = [
      {id: 1, text: "one"},
      {id: 2, text: "two"},
      {id: 3, text: "three"},
      {id: 4, text: "four"},
      {id: 5, text: "five"}
    ];

var name = array.find(function(item){
          return item.id == $localStorage.id;
 });

возвращает меня {id: 2, text: "two"} ожидается только две строки, ничего больше не должно печатать

Ответы [ 7 ]

0 голосов
/ 30 октября 2018

find возвращает объект, удовлетворяющий условию

var object = array.find(function(item) {
  return item.id == $localStorage.id;
});



var name = object? object.text: null;
console.log(name);
0 голосов
/ 30 октября 2018

Если вы хотите использовать синтаксис es6, вы можете написать так. Вы сделали все хорошо, за исключением того, что вам нужно было получить конкретную стоимость объекта.

const array = [
  { id: 1, text: "one" },
  { id: 2, text: "two" },
  { id: 3, text: "three" },
  { id: 4, text: "four" },
  { id: 5, text: "five" }
];

// So here i use same find as you did.

let object = array.find(item => {
  return item.id == $localStorage.id;
});

// And assigning text property of object to variable 'name'
// since object, can be undefined, using OR empty object, 
// so no error will be thrown if so.

let { text: name } = object || {};
console.log(name);

от https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find:

Метод find () возвращает значение первого элемента в массиве, которое удовлетворяет предоставленной функции тестирования. В противном случае возвращается undefined.

0 голосов
/ 30 октября 2018

Попробуйте вот так получить значение атрибута text при использовании поиска по id

var array = [{
    id: 1,
    text: "one"
  },
  {
    id: 2,
    text: "two"
  },
  {
    id: 3,
    text: "three"
  },
  {
    id: 4,
    text: "four"
  },
  {
    id: 5,
    text: "five"
  }
];

var name = array.find(function(item) {
  return item.id == 2;
}).text;

console.log(name);
0 голосов
/ 30 октября 2018

Вы можете использовать filter и map . Таким образом, вы можете настроить отфильтрованный результат так, как вы хотите.

var array = [
      {id: 1, text: "one"},
      {id: 2, text: "two"},
      {id: 3, text: "three"},
      {id: 4, text: "four"},
      {id: 5, text: "five"}
    ];

var name = array.filter(a=> a.id === 2).map(b=> {return b.text});
console.log(name)
0 голосов
/ 30 октября 2018

То, что вы сделали, возвращает элемент в позиции, где item.id == $localStorage.id. Если вы хотите получить текст, то после того, как элемент возвращается в var name, вы просто делаете name.text, потому что array.find() возвращает элемент, который прошел логическую операцию.

0 голосов
/ 30 октября 2018

Сначала вы можете найти объект, а затем получить свойство text, проверив, действительно ли операция find() вернула объект или это undefined.

var array = [{
    id: 1,
    text: "one"
  },
  {
    id: 2,
    text: "two"
  },
  {
    id: 3,
    text: "three"
  },
  {
    id: 4,
    text: "four"
  },
  {
    id: 5,
    text: "five"
  }
];

var findObj = array.find(function(item) {
  return item.id == 2;
});
//check if findObj is defined or not
var name = findObj? findObj.text: null;
console.log(name);

Вы также можете использовать деструктуризацию, чтобы получить это значение text непосредственно из find(), если вы уверены, что объект существует для этого значения localStorage. В противном случае возникнет ошибка.

var array = [{
    id: 1,
    text: "one"
  },
  {
    id: 2,
    text: "two"
  },
  {
    id: 3,
    text: "three"
  },
  {
    id: 4,
    text: "four"
  },
  {
    id: 5,
    text: "five"
  }
];

var {text} = array.find(function(item) {
  return item.id == 2;
});
console.log(text);
0 голосов
/ 30 октября 2018

Вы должны получить текст свойства найденного объекта:

var object = array.find(function(item){
   return item.id === $localStorage.id;
});

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