В основном, вам нужно zip
это.
Фрагмент:
let obj = {"BPContName":"aName;bName;cName","BPContEmail":"aEmail;bEmail;cEmail","BPContPWID":"aPWID;bPWID;cPWID"},
res = _.zipWith(
..._.map(obj, v => v.split(';')),
(name, email, pwid) => ({name, email, pwid})
);
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Обратите внимание, последовательность параметров мы должны поставить таким образом, исходный объект дает нам значения при использовании Object.values
или дает нам ключи при использовании Object.keys
обычно в алфавитном порядке. Но, в случае, если в любом env порядке порядок не гарантирован, мы можем отсортировать его с помощью последовательности ключей в качестве метаданных.
Или вы можете явно передать аргументы, например:
(obj.BPContName.split(';'), obj.BPContEmail.split(';'), obj.BPContPWID.split(';'))
Не уверенный, если существует очевидный способ, чтобы просто добавить методы, Вы хотите, но можно удалить методы, при помощи которых Вы не хотите undef_method
.
module Foo
def function1
end
def function2
end
def function3
end
end
module MiniFoo
include Foo
not_wanted_methods = Foo.instance_methods - %w(function1 function2)
not_wanted_methods.each {|m| undef_method m}
end
class Whatever
include MiniFoo
end
Аналогичное решение, но немного более автоматический. Я понятия не имею, какие странные вещи, которые могут произойти все же.
module Foo
def m1
puts "Hello from m1"
end
def m2
puts "Hllo from m2"
end
end
class Module
alias :__include__ :include
def include(mod, *methods)
if methods.size > 0
tmp = mod.dup
new_mod = Object.const_set("Mod#{tmp.object_id}", tmp)
toremove = new_mod.instance_methods.reject { |m| methods.include? m.to_sym }
toremove.each { |m| new_mod.send(:undef_method, m) }
__include__(new_mod)
else
__include__(mod)
end
end
end
class Bar
include Foo
end
class Baz
include Foo, :m2
end
bar = Bar.new
baz = Baz.new
p bar.methods - Object.methods
p baz.methods - Object.methods
=>
["m1", "m2"]
["m2"]
Принятие Вас управляет исходным кодом к модулю, я думаю, что самый чистый путь состоял бы в том, чтобы разделить модуль в к больше, мм, модульные части.
Если Вы только хотите некоторые части модуля, это - довольно хороший знак, что Вы могли осуществить рефакторинг тот модуль в несколько модулей, которые несут меньше ответственности.