Как проверить, существует ли массив данных в angular - PullRequest
1 голос
/ 28 февраля 2020

вот код:

data = [
    {
        'id': 'asdja',
        'username': 'james',
    },
    {
        'id': 'asqweja',
        'username': 'rhou',
    },
    {
        'id': 'asdqweqj',
        'username': 'arianne'
    },
    {
        'id': 'qpoaksl',
        'username': 'ryan'
    }
];

Я пытаюсь проверить, существует ли username.

Например, если я ввожу "james", тогда должно отобразиться "Username already exists"

Пытаюсь найти:

if (username === data.find((x: any) => x.username === x.username) {
 console.log('Username already exists');
} else {
 console.log('');
}

Ответы [ 5 ]

3 голосов
/ 28 февраля 2020

Для него можно использовать Javascript Array some, который возвращает логическое значение, когда условие выполняется или не выполняется.

const inputName = 'james';

// You can use destructuring assignment ({ }) if you only want to use/
// extract a certain property, in our case we will only use the username
const isUserExists = data.some(({ username }) => username === inputName);

console.log(isUserExists); 
2 голосов
/ 28 февраля 2020

const data = [
    {
        id: 'asdja',
        username: 'james',
    },
    {
        id: 'asqweja',
        username: 'rhou',
    },
    {
        id: 'asdqweqj',
        username: 'arianne'
    },
    {
        id: 'qpoaksl',
        username: 'ryan'
    }
];

const user = data.find((x) => x.username === 'james')

if (user) {
 console.log('Username already exists');
} else {
 console.log('');
}

Проблема в том, что функция find возвращает первый элемент массива

Следовательно, вы получите объект обратно в ответ, и теперь вы нужно проверить это с именем пользователя

const user = data.find((x) => x.username === 'james')

if (user) {
 console.log('Username already exists');
} else {
 console.log('');
}

надеюсь, это поможет!

1 голос
/ 28 февраля 2020

Вы также можете напрямую проверить состояние, используя filter - length

const data = [{id:'asdja',username:'james',},{id:'asqweja',username:'rhou',},{id:'asdqweqj',username:'arianne'},{id:'qpoaksl',username:'ryan'}];
let username = 'james';

if (data.filter(({ username }) => username == username).length) {
 console.log('User already exists');
} else {
  console.log('New User');
}
1 голос
/ 28 февраля 2020

То, что вы пытаетесь сделать, это поиск массива data (который является массивом объектов) для заданного username и хотите узнать, существует он или нет. Вы можете просто использовать filter(), чтобы увидеть, есть ли у вас пустой список или нет. Если он возвращает пустой список, то имя пользователя не существует, иначе оно существует.

var nameToCheck = 'james'
function checkUsername({username}) {
  return username===nameToCheck
}

var res = data.filter(checkUsername);

console.log(res===[] ? 'Username does not exists!' : 'Username already exists!');
0 голосов
/ 28 февраля 2020

Другой способ (с использованием индекса)

const username: string = "james";
const idx: number = data.findIndex(obj => obj.username === username);
if (idx > -1) {
// Username already exists.
} else {
// Username does not exists.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...