Как проверить, существует ли мой ключ в объекте массива

var arr = [{
   key: "key1", value: "z"
}, {
   key: "key2", value: "u"
}, {
   ...
}];

Как проверить, мой лиkey:"key1" уже существует или нет. Если он не существует, мне нужно добавить ключ в массиве ма.

if(arr.hasOwnProperty("key1")){
      arr.unshift({key:"key1", value:"z"});
}

Ответы на вопрос(6)

var key;
for(var i = 0; i < arr.length; i++)
{
    if(arr[i].key == "key1")
    {
        key = arr[i];
        break;
    }
}
if(typeof (key)=='undefined') //for if the value is 0 as int
{
    key = {
        key: "key1", value: "aaa"
    };
    arr.push(key);
}

Я сделал первую версию для себя, чтобы лучше понять логику, и добавил следующее:

если ключ существует, увеличьте свойство count соответствующего объекта, в противном случае создайте новый объект со счетчиком 1.

Во второй версии я понял, что предпочел бы мойarrayOfObjects переменная бытьobject, так что позже я мог бы целенаправленно указывать значения, а не циклически повторять массив, пока не получу совпадение, а затем получить соответствующее значение объекта. Таким образом, эта версия использует объект вместо массива объектов.

Версия 01 - Массив объектов

// based on: https://stackoverflow.com/a/9177103/1063287

// the original array of objects
var arrayofObjects = [{
    id: "CY01",
    count: 1
  },
  {
    id: "CY33",
    count: 5
  },
  {
    id: "CY55",
    count: 8
  }
];

// show the array in the interface
$(".before").text(JSON.stringify(arrayofObjects));

// define lookup function (must have access to arrayofObjects)
function lookup(key_to_check) {
  // for each object in the array of objects
  for (var i = 0; i < arrayofObjects.length; i++) {
    // if the object key matches the key to check
    if (arrayofObjects[i]["id"] === key_to_check) {
      // return true with index of matching object
      var returnObject = {};
      returnObject["exists"] = true;
      returnObject["index"] = i;
      return returnObject;
    }
  }
  // if the above loop has not already returned a value
  // return false
  var returnObject = {};
  returnObject["exists"] = false;
  return returnObject;
}

// on click, check whether the key exists
$(document).on("click", ".run", function() {

  var key_to_check = $(".key_to_check").val();

  $(".checking").text(key_to_check);

  var returnObject = lookup(key_to_check);

  // if key to check doesn't exist add it
  if (returnObject["exists"] === false) {
    console.log("key doesn't exist, adding object");
    arrayofObjects.push({
      id: key_to_check,
      count: 1
    });
  } else if (returnObject["exists"] === true) {
    // else if it does exists, increment the relevant counter
    console.log("key does exist, incrementing object count value");
    var index = returnObject.index;
    arrayofObjects[index].count += 1;
  }

  $(".after").text(JSON.stringify(arrayofObjects));
});
body {
  font-family: arial;
  font-size: 14px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>enter an existing or non-existing key and click run.</p>
<p>if existing, increment count, otherwise create new object with count of 1.</p>

<input class="key_to_check"><button class="run">run</button>

<br><br>
<div>array of objects - before: <span class="before"></span> </div>

<div>checking:<span class="checking"></span></div>

<div>array of objects - after: <span class="after"></span></div>

Версия 02 - Объект

// based on: https://stackoverflow.com/a/9177103/1063287

// the original object
var myObject = {
  "CY01": 1,
  "CY33": 5,
  "CY55": 8
};

// show the object in the interface
$(".before").text(JSON.stringify(myObject));

// define lookup function (must have access to myObject)
function lookup(key_to_check) {
  // for each property in the object
  for (key in myObject) {
    // if the key matches the key to check
    if (key === key_to_check) {
      // return true
      return true
    }
  }
  // if the above loop has not already returned a value
  // return false
  return false
}

// on click, check whether the key exists
$(document).on("click", ".run", function() {

  var key_to_check = $(".key_to_check").val();

  $(".checking").text(key_to_check);

  var returnObject = lookup(key_to_check);

  // if key to check doesn't exist add it
  if (returnObject === false) {
    console.log("key doesn't exist, adding object");
    myObject[key_to_check] = 1;
  } else if (returnObject === true) {
    // else if it does exists, increment the relevant counter
    console.log("key does exist, incrementing object count value");
    myObject[key_to_check] += 1;
  }

  $(".after").text(JSON.stringify(myObject));
});
body {
  font-family: arial;
  font-size: 14px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>enter an existing or non-existing key and click run.</p>
<p>if existing, increment count, otherwise create new property with count of 1.</p>

<input class="key_to_check"><button class="run">run</button>

<br><br>
<div>my object - before: <span class="before"></span> </div>

<div>checking:<span class="checking"></span></div>

<div>my object - after: <span class="after"></span></div>

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

/**
 * Check if an array key or object property exists
 * @key - what value to check for
 * @search - an array or object to check in
 */
function key_exists(key, search) {
    if (!search || (search.constructor !== Array && search.constructor !== Object)) {
        return false;
    }
    for (var i = 0; i < search.length; i++) {
        if (search[i] === key) {
            return true;
        }
    }
    return key in search;
}

Использование:

Как массив

key_exists('jared', ['jared', 'williams']); //= true

Как объект

key_exists('jared', {'jared': 'williams'}); //= true 

Вы можете использовать ECMAScript 5filter метод для удаления элементов из массива, если они не проходят ваш тест. Если в полученном массиве нет элементов, вы знаете, что с вашим значением их не было:

if(!arr.filter(function(elem) {
    return elem.key === "key1";
}).length) {
    arr.push({ key: "key1", value: "z" });
}

Если вы хотите, чтобы он работал в старых браузерах, вам нужно использовать шимArray.prototype.filter определено.

Решение Вопроса

заполненный объектами, вы должны сделать это следующим образом:

(ES3)

function lookup( name ) {
    for(var i = 0, len = arr.length; i < len; i++) {
        if( arr[ i ].key === name )
            return true;
    }
    return false;
}

if( !lookup( 'key1' ) ) {
    arr.push({
        key: 'key1',
        value: 'z'
    });
}

var map = {
       "key1": "z",
       "key2": "u"
};

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

if (!map["key1"]) {
   map["key1"] = "z";
}

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

Ваш ответ на вопрос