Как получить объект, находящийся в массиве, для отображения на документе или консоли - PullRequest
0 голосов
/ 08 октября 2018

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

КомуОрганизовав свои данные, я создал массив с именем products и создал объект для каждого продукта.

Мой массив в настоящее время выглядит следующим образом:

 var products = [
 {
  brand:"Healthy Boy",
  product:"Sweet Chilli Sauce",
  size: 300,
  measurement: "ml",
  barcode:"00909274636143",
  quantity:"2"
 },
 {
  brand:"Golden Dragon",
  product:"rice",
  size: 1,
  measurement: "kg",
  barcode:"5623593845",
  quantity:"5"
 },
 {
  brand:"Golden Dragon",
  product:"rice",
  size: 1,
  measurement: "kg",
  barcode:"5623593845",
  quantity:"5"
 }
];

Я использую две функции для поиска через ввод штрих-кода, чтобы увидеть, является ли штрих-код частью массива.Функции выглядят так:

function isBarcodeValid (barcode){
for(var i = 0; i < products.length; i++) {
    if(products [i].barcode === barcode){
        return true;
    }
}
return false;
}

function displayBarcode (barcode){
if (isBarcodeValid(barcode)){
    console.log("barcode exists");
} else {
    console.log("invalid barcode");
}
}

В данный момент я регистрирую на консоли, есть ли штриховой код в массиве, но есть ли способ, которым я могу отображать информацию, относящуюся к каждой полосекод, содержащийся в объекте?

Спасибо

Ответы [ 5 ]

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

В конечном итоге это будет довольно кратко, если вы собираетесь использовать ES6 (функции стрелок / деструктурирование) и Array.prototype.find () :

var products = [{ brand:"Healthy Boy", product:"Sweet Chilli Sauce", size: 300, measurement: "ml", barcode:"00909274636143", quantity:"2" }, { brand:"Golden Dragon", product:"rice", size: 1, measurement: "kg", barcode:"5623593845", quantity:"5" }, { brand:"Golden Dragon", product:"rice", size: 1, measurement: "kg", barcode:"5623593845", quantity:"5" } ];

const getBarcode = (bc) => products.find(({barcode}) => barcode == bc)
const displayBarcode = (bc) => console.log(getBarcode(bc) || 'invalid barcode')

displayBarcode(00909274636143)
displayBarcode(009092746111136143)

Идея в том, что если вы найдете его, вы просто выведете объект.Если нет, то оператор || (или) будет вычислять строку invalid barcode.

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

Увидел, что на него ответили, но только для некоторой специи:

const isValid=(barcode)=>{
    let a=products.findIndex(x=>x.barcode===barcode)
    a>-1?(console.log("barcode exists: "), 
        Object.keys(products[a]).forEach(y=>console.log(y, ":",products[a][y]))):
    console.log("invalid barcode");
}
isValid("5623593845");

Вы можете просто вернуть действительный объект, а не записывать свойства, как я сделал здесь.

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

вместо логического возврата, вместо этого вернуть объект или нуль:

function isBarcodeValid (barcode){
  for(var i = 0; i < products.length; i++) {
     if(products [i].barcode === barcode){
      return products[i];
     }
  }
  return null;
}

function displayBarcode (barcode){
  var v = isBarcodeValid(barcode);
  if (v){
    console.log(v);
  } else {
    console.log("invalid barcode");
  }
}
0 голосов
/ 09 октября 2018

Вы можете вернуть продукт, используя методы Array и синтаксис ES6 в javascript, чтобы выполнить поиск вместо обходного пути для данных for и прерывания цикла в середине:

'use strict';

const products = [{
  brand: 'Healthy Boy',
  product: 'Sweet Chilli Sauce',
  size: 300,
  measurement: 'ml',
  barcode: '00909274636143',
  quantity: '2',
  }, {
    brand: 'Golden Dragon',
    product: 'rice',
    size: 1,
    measurement: 'kg',
    barcode: '5623593845',
    quantity: '5',
 }, {
  brand: 'Golden Dragon',
  product: 'rice',
  size: 1,
  measurement: 'kg',
  barcode: '5623593845',
  quantity: '5',
}];


/**
 * Look for a given barcode and return the product or null if barcode doesn't exist
 * @param {String} barcode
 * @return {Object} product data or null
 * */
function isBarcodeValid (barcode){
  return products.find(p => p.barcode === barcode);
}

function displayBarcode (barcode) {
  const product = isBarcodeValid(barcode);
  if (product){
    console.log(`barcode exists: ${product}`);
  } else {
      console.log('invalid barcode');
  }
}
0 голосов
/ 09 октября 2018

 var products = [
 {
  brand:"Healthy Boy",
  product:"Sweet Chilli Sauce",
  size: 300,
  measurement: "ml",
  barcode:"00909274636143",
  quantity:"2"
 },
 {
  brand:"Golden Dragon",
  product:"rice",
  size: 1,
  measurement: "kg",
  barcode:"5623593845",
  quantity:"5"
 },
 {
  brand:"Golden Dragon",
  product:"rice",
  size: 1,
  measurement: "kg",
  barcode:"5623593845",
  quantity:"5"
 }
];

function findBarcode (barcode){
  for(var i = 0; i < products.length; i++) {
    const p = products[i]
      if(p.barcode === barcode){
          return p;
      }
  }
}

function displayBarcode (barcode){
  const barCode = findBarcode(barcode)
  const barcodeIsValid = !!barCode
  if (barcodeIsValid){
      console.log(barCode, "barcode exists");
  } else {
      console.log("invalid barcode");
  }
}

displayBarcode('00909274636143') //present
displayBarcode('not-a-barcode') //present

вы можете вернуть идентифицированный продукт при фильтрации, чтобы увидеть, присутствует ли он

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