আমার একটি সমতল জেএস বস্তু রয়েছে:
{a: 1, b: 2, c: 3, ..., z:26}
আমি একটি উপাদান বাদে অবজেক্টটি ক্লোন করতে চাই:
{a: 1, c: 3, ..., z:26}
এটি করার সবচেয়ে সহজ উপায় কী (যদি সম্ভব হয় এস 6/7 ব্যবহার করতে পছন্দ করেন)?
আমার একটি সমতল জেএস বস্তু রয়েছে:
{a: 1, b: 2, c: 3, ..., z:26}
আমি একটি উপাদান বাদে অবজেক্টটি ক্লোন করতে চাই:
{a: 1, c: 3, ..., z:26}
এটি করার সবচেয়ে সহজ উপায় কী (যদি সম্ভব হয় এস 6/7 ব্যবহার করতে পছন্দ করেন)?
উত্তর:
আপনি যদি ব্যাবেল ব্যবহার করেন তবে আপনি x থেকে ভেরিয়েবল বিতে সম্পত্তি বি অনুলিপি করতে নীচের বাক্য গঠন ব্যবহার করতে পারেন এবং তারপরে বাকী বৈশিষ্ট্যগুলিকে ভেরিয়েবল ওয়ায় অনুলিপি করতে পারেন :
let x = {a: 1, b: 2, c: 3, z:26};
let {b, ...y} = x;
এবং এটি স্থানান্তরিত হবে:
"use strict";
function _objectWithoutProperties(obj, keys) {
var target = {};
for (var i in obj) {
if (keys.indexOf(i) >= 0) continue;
if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
target[i] = obj[i];
}
return target;
}
var x = { a: 1, b: 2, c: 3, z: 26 };
var b = x.b;
var y = _objectWithoutProperties(x, ["b"]);
let x = [{a: 1, b: 2, c: 3, z:26}, {a: 5, b: 6, c: 7, z:455}];
ignoreRestSiblings
v3.15.0 (ফেব্রুয়ারি 3, 2017) এ যুক্ত একটি বিকল্প রয়েছে । দেখুন: কমিট c59a0ba
b
সুযোগের সত্যতা যে পরিবর্তিত করে না ।
var clone = Object.assign({}, {a: 1, b: 2, c: 3});
delete clone.b;
বা যদি আপনি সম্পত্তি অপরিজ্ঞাত হিসাবে গ্রহণ করেন:
var clone = Object.assign({}, {a: 1, b: 2, c: 3}, {b: undefined});
ইলিয়া প্যালকিনের উত্তরে যুক্ত করতে: আপনি এমনকি কীগুলি গতিশীলভাবে মুছে ফেলতে পারেন:
const x = {a: 1, b: 2, c: 3, z:26};
const objectWithoutKey = (object, key) => {
const {[key]: deletedKey, ...otherKeys} = object;
return otherKeys;
}
console.log(objectWithoutKey(x, 'b')); // {a: 1, c: 3, z:26}
console.log(x); // {a: 1, b: 2, c: 3, z:26};
সূত্র:
_
করতে চান না এমন ভেরিয়েবলের জন্য অনুমোদিত যা ব্যবহারের বিষয়ে?
var b = {a:44, b:7, c:1}; let {['a']:z, ...others} = b; console.log(z , others ); // logs: 44, {b:7, c:1}
যারা ES6 ব্যবহার করতে পারবেন না তাদের জন্য আপনি lodash
বা ব্যবহার করতে পারেন underscore
।
_.omit(x, 'b')
বা ramda
।
R.omit('b', x)
_.omit(x, 'b')
delete
।
আমি এই ESNext একটি লাইনার ব্যবহার করি use
const obj = { a: 1, b: 2, c: 3, d: 4 }
const clone = (({ b, c, ...o }) => o)(obj) // remove b and c
console.log(clone)
আপনার যদি সাধারণ উদ্দেশ্যে কাজ করা প্রয়োজন:
function omit(obj, props) {
props = props instanceof Array ? props : [props]
return eval(`(({${props.join(',')}, ...o}) => o)(obj)`)
}
// usage
const obj = { a: 1, b: 2, c: 3, d: 4 }
const clone = omit(obj, ['b', 'c'])
console.log(clone)
map
(({b, c, ...others}) => ({...others}))(obj)
আপনি এটির জন্য একটি সাধারণ সহায়ক ফাংশন লিখতে পারেন। লোড্যাশের একই নামের সাথে একই রকম ফাংশন রয়েছে: বাদ দিন
function omit(obj, omitKey) {
return Object.keys(obj).reduce((result, key) => {
if(key !== omitKey) {
result[key] = obj[key];
}
return result;
}, {});
}
omit({a: 1, b: 2, c: 3}, 'c') // {a: 1, b: 2}
এছাড়াও, লক্ষ্য করুন যে এটি অবজেক্ট.স্যাসাইন এর চেয়ে দ্রুত এবং তারপরে মুছুন: http://jsperf.com/omit-key
এরকম কিছু হতে পারে:
var copy = Object.assign({}, {a: 1, b: 2, c: 3})
delete copy.c;
এটি কি যথেষ্ট? বা c
আসলে কপি করা যায় না?
অবজেক্ট ডেস্ট্রাকচারিং ব্যবহার করে
const omit = (prop, { [prop]: _, ...rest }) => rest;
const obj = { a: 1, b: 2, c: 3 };
const objWithoutA = omit('a', obj);
console.log(objWithoutA); // {b: 2, c: 3}
_
ব্যবহারটি ইএসলিন্টের জন্য সমস্যাটির সমাধান করে না ...
আরে মনে হচ্ছে আপনি যখন কোনও বস্তু অনুলিপি করার চেষ্টা করছেন তখন কোনও সম্পত্তি মুছে ফেলার জন্য আপনি রেফারেন্স ইস্যুগুলিতে চলেছেন। কোথাও আপনাকে আদিম পরিবর্তনশীল নির্ধারণ করতে হবে যাতে জাভাস্ক্রিপ্ট একটি নতুন মান তৈরি করে।
সাধারণ ট্রিক (ভয়াবহ হতে পারে) আমি এটি ব্যবহার করেছি
var obj = {"key1":"value1","key2":"value2","key3":"value3"};
// assign it as a new variable for javascript to cache
var copy = JSON.stringify(obj);
// reconstitute as an object
copy = JSON.parse(copy);
// now you can safely run delete on the copy with completely new values
delete copy.key2
console.log(obj)
// output: {key1: "value1", key2: "value2", key3: "value3"}
console.log(copy)
// output: {key1: "value1", key3: "value3"}
JSON.parse(JSON.stringify(Object.assign({}, obj, { key2: undefined })));
। এমনকি এটি মুছতে হবে না, কেবল একটি মিথ্যা মান দরকার।
গতিশীল কীগুলি বাদ দেওয়ার জন্য এখানে একটি বিকল্প রয়েছে যা আমি বিশ্বাস করি যে এখনও উল্লেখ করা হয়নি:
const obj = { 1: 1, 2: 2, 3: 3, 4: 4 };
const removeMe = 1;
const { [removeMe]: removedKey, ...newObj } = obj;
removeMe
হিসাবে উপহিত removedKey
এবং উপেক্ষা করা হয়। newObj
হয়ে { 2: 2, 3: 3, 4: 4 }
। নোট করুন যে মুছে ফেলা কীটি বিদ্যমান নেই, মানটি সেট করা হয়নি undefined
।
সহজ রাস্তা
const allAlphabets = {a: 1, b: 2, c: 3, ..., z:26};
const { b, ...allExceptOne } = allAlphabets;
console.log(allExceptOne); // {a: 1, c: 3, ..., z:26}
এটি করার জন্য আপনি স্প্রেড অপারেটরও ব্যবহার করতে পারেন
const source = { a: 1, b: 2, c: 3, z: 26 }
const copy = { ...source, ...{ b: undefined } } // { a: 1, c: 3, z: 26 }
copy
const copy = { ...source, b: undefined }
পড়েছেন তা নিশ্চিত নন, ঠিক একইভাবে ফোটে।
কাঠামোগত ব্যবহারের উপরের সমাধানগুলি আপনার ব্যবহারযোগ্য ভেরিয়েবলের সত্যতা থেকে ভোগে, যা যদি আপনি এটি ব্যবহার করে থাকেন তবে ইএসলিন্টের কাছ থেকে অভিযোগ আসতে পারে।
সুতরাং এখানে আমার সমাধান:
const src = { a: 1, b: 2 }
const result = Object.keys(src)
.reduce((acc, k) => k === 'b' ? acc : { ...acc, [k]: src[k] }, {})
বেশিরভাগ প্ল্যাটফর্মগুলিতে (বাবেল ব্যবহার না করে IE ব্যতীত) আপনিও এটি করতে পারেন:
const src = { a: 1, b: 2 }
const result = Object.fromEntries(
Object.entries(src).filter(k => k !== 'b'))
এটি সম্পর্কে:
let clone = Object.assign({}, value);
delete clone.unwantedKey;
যদি আপনি একটি বিশাল ভেরিয়েবলের সাথে কাজ করে থাকেন তবে আপনি এটি অনুলিপি করতে চান না এবং এটি মুছে ফেলতে চান না কারণ এটি অদক্ষ হবে।
একটি হ'লনপ্রপার্টি চেক সহ একটি সাধারণ ফর্ম-লুপটি কাজ করা উচিত এবং এটি ভবিষ্যতের প্রয়োজনের সাথে আরও বেশি খাপ খাইয়ে নিতে পারে:
for(var key in someObject) {
if(someObject.hasOwnProperty(key) && key != 'undesiredkey') {
copyOfObject[key] = someObject[key];
}
}
এই সম্পর্কে কি? আমি এই প্যাটারটিকে আশেপাশে কখনও পাইনি তবে আমি অতিরিক্ত বস্তু তৈরির প্রয়োজন ছাড়াই এক বা একাধিক বৈশিষ্ট্য বাদ দেওয়ার চেষ্টা করছিলাম। এটি কাজটি করার মতো বলে মনে হচ্ছে তবে কিছু পার্শ্ব প্রতিক্রিয়া রয়েছে যা আমি দেখতে পাচ্ছি না। অবশ্যই খুব পঠনযোগ্য নয়।
const postData = {
token: 'secret-token',
publicKey: 'public is safe',
somethingElse: true,
};
const a = {
...(({token, ...rest} = postData) => (rest))(),
}
/**
a: {
publicKey: 'public is safe',
somethingElse: true,
}
*/
আমি আমার রেডাক্স রিডিসারের উদাহরণ হিসাবে এটি এভাবে সম্পাদন করেছি:
const clone = { ...state };
delete clone[action.id];
return clone;
অন্য কথায়:
const clone = { ...originalObject } // note: original object is not altered
delete clone[unwantedKey] // or use clone.unwantedKey or any other applicable syntax
return clone // the original object without the unwanted key
const { [removeMe]: removedKey, ...newObj } = obj;
- এই প্রশ্নের আমার উত্তর দেখুন।
আমি সম্প্রতি এটি খুব সহজ উপায়ে করেছি:
const obj = {a: 1, b: 2, ..., z:26};
অযাচিত সম্পত্তি আলাদা করতে কেবল স্প্রেড অপারেটর ব্যবহার করুন :
const {b, ...rest} = obj;
... এবং অবজেক্ট.অ্যাসাইন করুন কেবলমাত্র 'বিশ্রাম' অংশ নিতে:
const newObj = Object.assign({}, {...rest});
rest
ইতিমধ্যে একটি নতুন অবজেক্ট - আপনার শেষ লাইনের দরকার নেই। এছাড়াও, এটি গৃহীত সমাধানের মতো ident
const x = {obj1: 1, pass: 2, obj2: 3, obj3:26};
const objectWithoutKey = (object, key) => {
const {[key]: deletedKey, ...otherKeys} = object;
return otherKeys;
}
console.log(objectWithoutKey(x, 'pass'));